Selenium中的无头Chrome检索空白页(尽管没有无头标志也可以工作)

时间:2019-01-14 18:10:22

标签: java selenium google-chrome selenium-chromedriver google-chrome-headless

我试图以无头模式使用Chrome获取页面的内容,但是某些页面仅返回空HTML。我的设置:

  • Java 8
  • 硒版本3.14.0
  • Selenium Chrome驱动程序版本3.141.59
  • 在Windows 10上进行测试

代码:

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: "

当我不使用无头模式时,它会起作用。

如果我以无头模式使用Firefox,它也可以工作。

是否存在我可能缺少的设置?为什么在无头模式下不起作用?

谢谢您的帮助。

2 个答案:

答案 0 :(得分:1)

该网页显然通过用户代理运行Chrome Headless时会检测到(无头运行时会有所不同,并且实际上包含alter table bplateinfo2018 add [New O Swing Percentage] as decimal(5,4) update bplateinfo2018 Set [New O Swing Percentage] = [Original O Swing Percentage] / 100 )。简单的解决方案:例如,在HeadlessChrome中指定一个Chrome非无头用户代理,例如

ChromeOptions

以下是通过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

答案 1 :(得分:0)

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

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

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

基本上,它告诉 ChromeDriver 选项在检测到不安全证书时不要停止浏览器执行,并照常进行。

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