【问题标题】:Selenium, how to take screenshot without opening the browser?Selenium,如何在不打开浏览器的情况下截屏?
【发布时间】:2016-05-10 14:01:08
【问题描述】:

我想使用 Selenium 截取网页的屏幕截图。 我注意到截取屏幕截图的操作需要打开网络浏览器本身。 尝试将webDriver.Navigate().GoToUrl("http://www.google.com"); 更改为webDriver.Url = "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();
}

【问题讨论】:

    标签: c# .net selenium selenium-webdriver


    【解决方案1】:

    不-你需要让WebDriver请求页面,否则它怎么知道要生成什么截图?

    如果您想避免真正的“慢”浏览器启动并打开一个窗口,您应该考虑无头运行该浏览器,如下所示:

    How do I run Selenium in Xvfb?

    或者查看无头 WebKit 浏览器 PhantomJS(或者可能是 SlimerJS),并使用与您现在几乎完全相同的 WebDriver API,让它在“内存中”生成您的屏幕截图:

    Phantomjs - take screenshot of a web page

    只需替换:

    WebDriver webDriver = new ChromeDriver();
    

    与:

    WebDriver webDriver = new PhantomJSDriver();
    

    (显然需要本地安装应用)

    编辑:请注意,当从无头 CI 服务器运行时,典型用例是“隔夜”连续集成/连续测试。但是,它可以很容易地添加到其他工作流程中,例如用于视觉回归测试和简单的一次性检查。

    【讨论】:

    • 不,不是一个选项,因为您的 Firefox 是用户的“真正”浏览器。但是,如果您点击第一个链接,它会显示如何设置您的图形环境,以便渲染可以在“内存中”进行,因此用户不会看到。
    • 老实说,我推荐 PhantomJS 方法——它是一种非常有用的工具,可以添加到你的军械库中——但请记住,它不一定会像 FF 那样呈现 100% 的效果。
    【解决方案2】:

    有多种方法可以解决:

    • 有 chrome 标志 --no-startup-window 应该在没有窗口的情况下打开 chrome。我试过了,没用,不过,你可以试一试。
    • 使用 hacks - 有一种方法可以在您从未见过的情况下启动 chrome,它运行良好。只需使用--window-position=-9999,0,请注意,TakeScreenShot() 在我的经验中有一些奇怪的异常 - 它会聚焦窗口,它会随机耗尽内存等等。我最终做的是我编写了可以截屏并返回的 chrome 扩展他们通过 JS 回到 selenium。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-21
      • 1970-01-01
      • 1970-01-01
      • 2016-07-13
      • 2019-06-11
      • 1970-01-01
      • 2019-10-05
      相关资源
      最近更新 更多