繁体   English   中英

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

[英]Any way to start Google Chrome in headless mode?

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

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

更新于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最终将获得“ - 无头”参数: https ://bugs.chromium.org/p/chromium/issues/detail?id = 612904

关于BlinkOn 6 的演讲 (2016年6月16日,17日)

更新 --headless 11月29日:--headless flag设计doc: https--headless

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

更新--headless 3月12日: 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虚拟帧缓冲区和谷歌浏览器:

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实现。

您可以设置一个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 &

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM