有无法以无头模式启动Google Chrome的方法吗?

时间:2012-02-09 12:23:00

标签: google-chrome headless

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

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

11 个答案:

答案 0 :(得分:61)

<强> 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.   
  3. 演示使用无头API的示例应用程序。
  4.   

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

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

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

文档正在进行中:

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

9月20日更新&#39; 看起来Chrome最终会得到&#34; - 无头&#34;参数: https://bugs.chromium.org/p/chromium/issues/detail?id=612904

BlinkOn 6(2016年6月16日,17日)有a presentation

更新11月29日&#39; 16: --headless旗帜的设计文档:https://docs.google.com/document/d/1aIJUzQr3eougZQp90bp4mqGr5gY6hdUice8UPa-Ys90/edit#heading=h.qxqfzv2lj12s

12月13日更新&#39; --headless标志预计很快将在Canary版本中提供

3月12日更新&#39; :Chrome 57的--headless标志有效。等待Selenium和其他工具赶上来。用户指南:https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md

答案 1 :(得分:22)

这家伙设法通过使用Xvfb(X虚拟帧缓冲区)无聊地运行Chrome,以欺骗Chrome认为它正在显示一个窗口:

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

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

所以基本上你需要通过以下方式安装X虚拟帧缓冲区和谷歌浏览器

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

答案 2 :(得分:12)

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

答案 3 :(得分:7)

如果你把它作为子子进程启动,它会以无头模式启动。除此之外:

  • nircmd.exe可以根据其PID
  • 对chrome执行win hide
  • Autohotkey_L也可以在没有任务栏按钮的情况下启动Chrome隐藏

答案 4 :(得分:7)

您可以设置一个Linux VM并在其中使用xvfb。

在debian / ubuntu上安装:

sudo aptitude install xvfb

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

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

答案 5 :(得分:5)

Chromium Embedded Framework project似乎可能适合您的用例。我没有亲身体验这个项目,但我听说过很好的东西,并且它有一个可靠的API,你应该可以为你的目的利用它。

答案 6 :(得分:3)

我还没有足够的声誉发表评论,但是想让大家知道,Vanuan提到的镀铬无头模式实际上与Selenium webdriver配合使用。

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

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

答案 7 :(得分:2)

我最近发现this article提到了几个似乎这样做的命令行选项。使用这些关键字,我搜索了this piece of code,这似乎证实了这些选项存在。

// 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,确实在没有任何窗口的情况下启动了Chrome。看起来它发射得很好,它催生了所有典型的孩子,但我试图让它加载的网站似乎并没有真正被访问过。这种无头模式可能只适用于运行应用程序,而不适用于无头访问网站*),但它看起来非常有前途,因为正常的工作树已经设置,只有没有窗口。

第二个选项--silent-launch使chrome进程非常安静。我没有注意到任何生成的孩子,这个过程很快就会消失。我怀疑它是否适用于这种情况。

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

// 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

并且感觉很脏,确定它没有真正的无头,但是窗户仍然不在我的视线范围内,而且一切都是用Chrome的启动选项完成的,没有外部工具发送低级别隐藏窗口的消息。

*)是的,我知道尝试做奇怪的事情。基本上我试图摆脱考试期间由Karma保留的Chrome窗口。我知道我可以切换到PhantomJS,但我特别需要在Chrome中运行它们,窗口突然出现......呃......从长远来看是令人不安的。

答案 8 :(得分:0)

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

  

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

它目前适用于Linux,有一个很好的presentation

答案 9 :(得分:0)

我还能够使用NightwatchJS制作镀铬无头工作。这是让我使用它的配置:

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

答案 10 :(得分:0)

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