我的最终目标是能够拍摄自动截图。为此,我一直在阅读这个article,它说它应该在命令行中这么简单:
chrome --headless --disable-gpu --screenshot https://www.chromestatus.com/
但我不能在当前目录中的任何地方获取任何screenshot.png文件,在我的情况下为C:\ temp。我也试过省略“无头”'参数,但唯一发生的事情是Chrome打开网站但没有创建文件。
计划是将铬和硒一起使用:
public void ScreenshotPage(string url)
{
ChromeOptions o = new ChromeOptions();
o.AddArgument("window-size=1920,1200");
o.AddArgument("disable-gpu");
o.AddArgument("disable-extensions");
o.AddArgument("headless");
o.AddArgument(url);
using (var driver = new ChromeDriver(o))
{
//driver.Navigate().GoToUrl(url); // if o.AddArgument(url) doesn't work then try this instead.
//Thread.Sleep(10000);
Screenshot screenshot = driver.GetScreenshot();
screenshot.SaveAsFile(@"C:\temp\test.png", ScreenshotImageFormat.Png);
}
}
结果是一个空白的png文件,似乎具有正确的分辨率。
我正在研究无头Chrome的一个原因是我的程序将在虚拟机中运行而无需用户登录。这会给ChromeDriver的GetScreenshot()带来问题,因为它将使用非常低的分辨率来截取屏幕截图。我希望无头Chrome可以解决这个问题。
在互联网上似乎没有任何相关信息,保存Using headless Chrome as an automated screenshot tool (alternative to PhantomJS),作者明确表示他的目标是Chrome v60。我使用木偶操作者有点犹豫,因为我在.NET中写作并不确定当前的端口是否
环境:Google Chrome 63.0.3239.132 64位,Windows 10(和Server 2012),Chromedriver 2.34
答案 0 :(得分:0)
试试这个
using (var driver = new ChromeDriver(o))
{
Screenshot ss = ((ITakesScreenshot)driver).GetScreenshot();
ss.SaveAsFile(@"C:\temp\test.png", ScreenshotImageFormat.Png);
}