硒,如何在不打开浏览器的情况下截取屏幕截图
本文关键字:浏览器 情况下 截取 屏幕截图 | 更新日期: 2023-09-27 18:32:45
我想用Selenium截取网页的屏幕截图。我注意到截取屏幕截图的操作需要打开网络浏览器本身。试图用webDriver.Url = "http://www.google.com";
改变webDriver.Navigate().GoToUrl("http://www.google.com");
但没有成功,我什至试图让它没有 url,浏览器以"data"的 url 打开,现在我明白了其他东西使浏览器打开。
private void button1_Click(object sender, EventArgs e)
{
var capabilitiesInternet = new
OpenQA.Selenium.Remote.DesiredCapabilities();
capabilitiesInternet.
SetCapability("ignoreProtectedModeSettings", true);
IWebDriver webDriver = new ChromeDriver();
webDriver.Navigate().GoToUrl("http://www.google.com");
Screenshot screenshot = ((ITakesScreenshot)webDriver).GetScreenshot();
screenshot.SaveAsFile("E:''ScreenShot.png",
System.Drawing.Imaging.ImageFormat.Png);
webDriver.Quit();
}
否 - 您需要让 WebDriver 请求页面,否则它如何知道要生成什么屏幕截图?
如果你想避免一个真正的、"缓慢"的浏览器启动和打开一个窗口,你应该考虑无头地运行该浏览器,如下:
如何在 Xvfb 中运行硒?
或者查看无头WebKit浏览器PhantomJS(或者可能是SlimerJS),并使用与您现在几乎完全相同的WebDriver API,要求它"在内存中"生成屏幕截图:
Phantomjs - 截取网页的屏幕截图
只需替换:
WebDriver webDriver = new ChromeDriver();
跟:
WebDriver webDriver = new PhantomJSDriver();
(显然需要在本地安装应用程序)
编辑:请注意,当从无头CI服务器运行时,典型的用例是"一夜之间"的持续集成/持续测试。但是,它可以很容易地添加到其他工作流程中,例如用于视觉回归测试和简单的一次性检查。
有多种方法可以做到这一点:
- 有铬标志
--no-startup-window
应该在没有窗口的情况下打开铬。我试过了,但没有用,但是,你可以试一试。 - 使用黑客 - 有一种方法可以在您从未看到的情况下启动 chrome,它工作得很好。只需使用
--window-position=-9999,0
,请注意,TakeScreenShot() 在我的体验中有一些奇怪的异常 - 它聚焦窗口,随机耗尽内存等。我最终做的是我编写了chrome扩展程序,它可以截取屏幕截图并通过JS将它们返回到硒。