Chrome命令行无法截屏

3
我的最终目标是能够自动截屏。为此,我一直在阅读这篇文章,其中提到命令行中只需要这样简单的命令就可以实现:
chrome --headless --disable-gpu --screenshot https://www.chromestatus.com/

但是在当前目录(C:\temp)中我无法找到任何 screenshot.png 文件。我已经尝试省略 'headless' 参数,但唯一发生的事情就是 Chrome 打开了网站但没有创建文件。

计划是将 Chrome 和 Selenium 结合使用:

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可以解决这个问题。
互联网上似乎没有相关信息,除了使用无头Chrome作为自动化截图工具(替代PhantomJS),作者明确表示他的目标是Chrome v60。我有点犹豫使用puppeteer,因为我是用.NET编写的,不确定当前端口是否支持。
环境:Google Chrome 63.0.3239.132 64位,Windows 10(和Server 2012),Chromedriver 2.34

我尝试使用上面的命令行(替换了URL),但也没有截图 - 这表明信息已过时。 - BugFinder
1个回答

1
尝试一下这个。
using (var driver = new ChromeDriver(o))
{
    Screenshot ss = ((ITakesScreenshot)driver).GetScreenshot();
    ss.SaveAsFile(@"C:\temp\test.png", ScreenshotImageFormat.Png);
}

谢谢,但是上面的代码只在非无头模式下工作,即没有--headless参数。 - OnionJack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接