Selenium 中的 Headless Chrome 检索空页面(尽管没有 headless 标志也能工作)

Headless Chrome in Selenium retrieves empty page (works without headless flag though)

我正在尝试在无头模式下使用 Chrome 获取页面内容,但某些页面 return 仅为空 HTML。我的设置:

代码:

ChromeOptions options = new ChromeOptions();
options.setHeadless(true);
RemoteWebDriver driver = new ChromeDriver(options);

driver.get("https://www.patagonia.com/home/");

System.out.println("Title: " + driver.getTitle()); // prints out "Title: "

当我不使用无头模式时它工作。

如果我在 headless 模式下使用 Firefox,它也有效。

是否有我可能遗漏的设置,或者为什么它在无头模式下不起作用?

感谢您的帮助。

网页显然通过用户代理检测到 运行 Chrome Headless(这与 运行 headless 不同,字面上会包含 HeadlessChrome)。简单的解决方案:在 ChromeOptions 中指定一个 Chrome 非无头用户代理,例如

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36

以下是如何通过 ChromeOptions 指定它:

ChromeOptions options = new ChromeOptions()
                            .addArguments("--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36")
                            .setHeadless(true);

我 运行 遇到了与 .NET 完全相同的问题,这是因为我在 IIS 中使用了本地不安全的证书。

为了解决这个问题,我添加了以下内容...

ChromeOptions options = new ChromeOptions();
ChromeOptions.AcceptInsecureCertificates = true;

差不多,它告诉 Chrome 驱动程序选项在检测到不安全证书时不要停止浏览器执行,并照常进行。

我还发现在关闭无头选项的情况下 运行遇到 运行 Chrome 的问题时它很有帮助,可以查看浏览器实际在做什么。