无法在Chrome命令行中截取屏幕截图

时间:2018-01-08 14:34:57

标签: c# google-chrome screenshot selenium-chromedriver

我的最终目标是能够拍摄自动截图。为此,我一直在阅读这个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

1 个答案:

答案 0 :(得分:0)

试试这个

using (var driver = new ChromeDriver(o))
{
    Screenshot ss = ((ITakesScreenshot)driver).GetScreenshot();
    ss.SaveAsFile(@"C:\temp\test.png", ScreenshotImageFormat.Png);
}