62

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

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

4

11 回答 11

65

TL;博士

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 使用的示例应用程序。

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

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

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

文档正在进行中:

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

2016 年9 月 20 日更新:看起来 chrome 最终会获得“--headless”参数: https ://bugs.chromium.org/p/chromium/issues/detail?id=612904

BlinkOn 6 (June 16/17, 2016)有一个演讲

2016 年 11 月 29 日更新:--headless标志设计文档: https ://docs.google.com/document/d/1aIJUzQr3eougZQp90bp4mqGr5gY6hdUice8UPa-Ys90/edit#heading=h.qxqfzv2lj12s

2016 年 12 月 13 日更新: --headless预计很快将在 Canary 版本中提供标志

2017 年 3 月 12 日更新: Chrome 57 有一个--headless标志工作。等待 Selenium 和其他工具赶上。用户指南:https ://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md

于 2015-12-09T04:24:40.877 回答
23

这个人设法通过使用 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
于 2012-02-09T12:33:47.997 回答
12

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

于 2012-05-16T14:47:17.160 回答
7

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

  • nircmd.exe 可以win hide根据其 PID 在 chrome 上执行
  • Autohotkey_L 也可以在没有任务栏按钮的情况下隐藏启动 Chrome
于 2012-03-31T19:37:18.320 回答
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 &
于 2012-07-09T10:41:16.040 回答
5

Chromium Embedded Framework 项目似乎适合您的用例。我没有该项目的个人经验,但我听说了一些好消息,并且它有一个可靠的 API,您应该可以利用它来实现您的目的。

于 2012-02-10T08:07:55.650 回答
3

我还没有足够的声誉发表评论,但想让你们知道 Vanuan 提到的 chrome 无头模式实际上适用于 Selenium webdriver。

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

ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
ChromeDriver chromeDriver = new ChromeDriver(options);
于 2017-04-21T13:05:59.027 回答
2

我最近发现这篇文章提到了几个似乎可以做到这一点的命令行选项。使用这些关键字,我用谷歌搜索了这段代码,这似乎证实了这些选项存在。

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

我设法成功地运行 Chrome--no-startup-window并且确实它在没有任何窗口的情况下启动。看起来它启动正常,它产生了所有典型的孩子,但我试图让它加载到里面的网站似乎并没有真正被访问过。这种无头模式可能仅适用于运行应用程序而不是无头访问网站*),但它看起来很有希望,因为设置了正常的工作树,只是没有窗口。

第二个选项--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 中运行它们,并且弹出的窗口是.. eh.. 从长远来看令人不安。

于 2015-08-19T11:15:12.340 回答
0

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

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

它目前在 Linux 上运行,有一个不错的演示文稿

于 2016-09-18T19:23:54.353 回答
0

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

    "chromeHeadless": {
  "desiredCapabilities": {
    "browserName": "chrome",
    "chromeOptions": {
      "args": ["--headless"],
      "binary": "/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary"
    }
  }
}
于 2017-04-26T08:13:50.430 回答
0

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

于 2017-07-03T20:13:02.353 回答