硒,如何在不打开浏览器的情况下截取屏幕截图

本文关键字:浏览器 情况下 截取 屏幕截图 | 更新日期: 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将它们返回到硒。
相关文章: