任何方式启动谷歌浏览器在无头模式?

我仔细地修改了http://peter.sh/experiments/chromium-command-line-switches/#chrome-frame上的开关列表,找不到在隐藏的后台进程中启动Chrome的任何内容。

我能够做到的最接近的就是--keep-alive-for-test +自定义打包的应用程序,但是应用程序无法执行任何传递的代码,因为(报告的方式)“无窗口 – ChromeHidden”。

TL; DR

 google-chrome --headless --remote-debugging-port=9222 http://example.com 

你还需要临时使用--disable-gpu


教程

https://developers.google.com/web/updates/2017/04/headless-chrome


有一项工作正在进行中: https : //code.google.com/p/chromium/issues/detail?id=546953

主要交付物是:

  1. 一个无头应用程序可以链接到的库。
  2. 演示使用无头API的示例应用程序。

因此,可以创build一个简单的应用程序,在控制台中运行而不需要连接到显示器。

更新16年4月18日:工作主要完成。 现在有一个公共论坛:

https://groups.google.com/a/chromium.org/forum/#!forum/headless-dev

文档正在进行中:

https://chromium.googlesource.com/chromium/src/+/master/headless/README.md

更新Sep 20 '16:它看起来像铬最终将得到“ – 无头”参数: https ://bugs.chromium.org/p/chromium/issues/detail?id = 612904

BlinkOn 6(2016年6月16日/ 17日)

更新11月29 '16:devise文档为--headless标志: https : --headless

更新16年12月13日: – 无 --headless国旗预计在金丝雀即将build成

更新3月12 '17: Chrome 57有一个 – 无--headless国旗工作。 等待selenium和其他工具赶上。 用户指南: https : //chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md

这个人通过使用Xvfb(X虚拟帧缓冲区)来无恶意地运行Chrome来诱使Chrome认为它正在显示一个窗口:

http://e-method.blogspot.fr/2010/11/google-chrome-with-xvfb-headless-server.html

如果你在Linux上,你可以试试。

所以基本上你需要通过以下方式安装X虚拟帧缓冲区和Google Chrome:

 root@localhost: ~# apt-get install xvfb imagemagick root@localhost: ~# apt-get install google-chrome 

然后在显示器上运行浏览器:

 root@localhost: ~# xvfb-run --server-args='-screen 0, 1024x768x24' \ google-chrome -start-maximized http://www.example.com \ > & /dev/null & root@localhost: ~# DISPLAY=:99 import -window root myimage.png 

或者你可以看看PhantomJS项目,这是一个无头的WebKit实现。

你可以build立一个linux虚拟机,并使用它的xvfb。

在debian / ubuntu上安装:

 sudo aptitude install xvfb 

启动Chrome headless并访问http://example.com

 xvfb-run --server-args='-screen 0, 1024x768x16' google-chrome -start-maximized http://example.com > /dev/null & 

如果将其作为子subprocess启动,则会以无头模式启动。 除此之外:

  • nircmd.exe可以根据它的PID win hide在铬上
  • Autohotkey_L也可以在没有任务栏button的情况下启动Chrome

Chromiumembedded式框架项目似乎可能适合您的用例。 我没有这个项目的个人经验,但是我听说过很好的东西,而且它有一个可靠的API,你应该可以为你的目的利用。

我还没有足够的评价,但是想让大家知道Vanuan提到的chrome headless模式实际上是和Selenium webdriver一起使用的。

在Java中,您可以通过chromeDriver将标志传递给chrome,代码如下:

 ChromeOptions options = new ChromeOptions(); options.addArguments("--headless"); ChromeDriver chromeDriver = new ChromeDriver(options); 

我最近发现这篇文章提到几个命令行选项似乎这样做。 使用这些关键字我search了这段代码似乎确认这些选项存在。

 // Does not automatically open a browser window on startup (used when // launching Chrome for the purpose of hosting background apps). const char kNoStartupWindow[] = "no-startup-window"; // Causes Chrome to launch without opening any windows by default. Useful if // one wishes to use Chrome as an ash server. const char kSilentLaunch[] = "silent-launch"; 

我成功地使用--no-startup-window成功运行了Chrome,而且确实没有任何窗口。 它看起来好像启动正常,它产生了所有典型的孩子,但我试图使其内部加载的网站似乎并没有实际访问。 这种无头模式可能只是用于运行应用程序,而不是用于访问无头的站点*),但是它看起来非常有希望,因为普通的工作树已经build立起来了,只是没有窗户而已。

第二个选项--silent-launch无声--silent-launch使镀铬过程非常安静。 我没有注意到有任何孩子产生,并且过程迅速退出。 我怀疑这种情况下可以使用。

在我用这些选项尝试失败后,我专注于不那么复杂的方式。 在列表的底部有两个选项:

 // Specify the initial window position: --window-position=x,y const char kWindowPosition[] = "window-position"; // Specify the initial window size: --window-size=w,h const char kWindowSize[] = "window-size"; 

我运行了Chrome浏览器,将其完全移出工作区:

 --window-size=800,600 --window-position=-800,0 

尽pipe感觉很脏,但确定它并不是真正的无头的,但窗口仍然不在我的视线之内,而且所有的事情都是用铬的启动选项完成的,没有外部工具发送低级窗口隐藏的消息。

*)是的,我知道尝试做奇怪的事情。 基本上我试图摆脱testing期间由Karma保存的Chrome窗口。 我知道我可以切换到PhantomJS,但我特别需要在Chrome中运行它们,并且popup的窗口是..呃..长期来说令人不安。

目前正在开发中,您可以从这里阅读更多关于它的信息: https : //chromium.googlesource.com/chromium/src/+/master/headless/README.md

无头Chromium是在无头/服务器环境中运行Chromium的库。 预期的用例包括加载网页,提取元数据(如DOM)和从页面内容生成位图 – 使用Chromium和Blink提供的所有现代Web平台function。

目前它在Linux上工作,有一个很好的演示 。

我也可以用NightwatchJS做出无头的工作。 这是让我使用它的configuration:

  "chromeHeadless": { "desiredCapabilities": { "browserName": "chrome", "chromeOptions": { "args": ["--headless"], "binary": "/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary" } } } 

Chrome 59有能力创build实例为无头。 find下面的教程https://www.automation99.com/2017/07/how-to-use-chrome-headless-using.html?m=1