我想使用Selenium截取网页截图。
我注意到采取屏幕截图的操作需要打开Web浏览器本身。
尝试使用webDriver.Navigate().GoToUrl("http://www.google.com");
更改webDriver.Url = "http://www.google.com";
,但没有成功,
我甚至试图在没有网址的情况下离开它,浏览器打开了“数据”的网址,现在我明白其他东西会让浏览器打开。
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();
}
答案 0 :(得分:1)
不 - 您需要让WebDriver请求页面,否则它怎么知道要生成什么屏幕截图?
如果你想避免一个真实的,慢的'浏览器启动并打开一个窗口,您应该考虑无头地运行该浏览器,如下所示:
How do I run Selenium in Xvfb?
或者查看无头WebKit浏览器PhantomJS(或者SlimerJS),并使用与现在几乎完全相同的WebDriver API,让它生成您的屏幕截图' in-存储器':
Phantomjs - take screenshot of a web page
只需替换:
WebDriver webDriver = new ChromeDriver();
使用:
WebDriver webDriver = new PhantomJSDriver();
(显然需要在本地安装应用程序)
修改:请注意,此操作的典型用例是“隔夜”'从无头CI服务器运行时的持续集成/连续测试。但是,它可以非常容易地添加到其他工作流程中,例如,用于视觉回归测试和简单的一次性检查。
答案 1 :(得分:0)
有多种方法可以解决这个问题:
--no-startup-window
,应该打开没有窗口的铬。我试了一下,但它不起作用,但是,你可以试一试。--window-position=-9999,0
,请注意,TakeScreenShot()在我的经验中有一些奇怪的异常 - 它集中了窗口,它随机地耗尽了内存等等。我最后做的是我写了chrome扩展,可以截取屏幕截图并通过JS将它们返回到selenium。