无头Chromium允许在无头/服务器环境中运行Chromium。预期的用例包括使用Chromium和Blink提供的所有现代Web平台功能,加载网页,提取元数据(例如DOM)以及从页面内容生成位图。
有两种使用无头铬的方法:
通过DevTools远程调试协议使用
- 使用
--headless
命令行标志启动普通的Chrome二进制文件(目前仅适用于Linux):
0 |
$ chrome --headless --remote-debugging-port = 9222 https://chromium.org |
当前,您还需要使用--disable-gpu
以避免因缺少Mesa库而导致错误。
http://localhost:9222
在另一个浏览器中导航至以打开DevTools界面,或使用Selenium之类的工具来驱动无头浏览器。
来自Node.js的用法
例如,可以使用chrome-remote-interface Node.js包提取页面的DOM,如下所示:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
const CDP = require('chrome-remote-interface'); CDP((client) => { // Extract used DevTools domains. const {Page, Runtime} = client; // Enable events on domains we are interested in. Promise.all([ Page.enable() ]).then(() => { return Page.navigate({url: 'https://example.com'}); }); // Evaluate outerHTML after page has loaded. Page.loadEventFired(() => { Runtime.evaluate({expression: 'document.body.outerHTML'}).then((result) => { console.log(result.result.value); client.close(); }); }); }).on('error', (err) => { console.error('Cannot connect to browser:', err); }); |
用作C ++库
可以将Headless Chromium构建为可嵌入C ++应用程序的库。否则,该方法类似于通过DevTools连接控制浏览器,但是它提供了更多的自定义点,例如,用于网络和mojo服务。
无头示例是一个小示例应用程序,它演示了无头C ++ API的用法。它加载网页并输出结果DOM。要运行它,首先初始化一个无头构建配置:
0 1 2 |
$ mkdir -p out/Debug $ echo 'import("//build/args/headless.gn")' > out/Debug/args.gn $ gn gen out/Debug |
然后构建示例:
0 |
$ ninja -C out/Debug headless_example |
构建完成后,可以使用以下命令运行示例:
0 |
$ out/Debug/headless_example https://www.google.com |
无头外壳是一种更强大的无头应用程序。例如,它支持使用DevTools协议进行远程调试。为此,请使用指定调试端口的参数启动应用程序:
0 1 |
$ ninja -C out/Debug headless_shell $ out/Debug/headless_shell --remote-debugging-port=9222 https://youtube.com |
然后http://localhost:9222
使用浏览器导航到。
嵌入器API
embedder API使开发人员可以将无头库集成到他们的应用程序中。该API为低级适应点(例如网络和运行循环)提供了默认实现。
主要的嵌入式API类是:
HeadlessBrowser::Options::Builder
-定义嵌入选项,例如:SetMessagePump
-替换默认的基本消息泵。请参阅base::MessagePump
。SetProxyServer
-将HTTP / HTTPS代理服务器配置为用于访问网络。
客户端/ DevTools API
无头客户端API用于驱动浏览器并与加载的网页进行交互。它的主要类别是:
HeadlessBrowser
-表示全局无头浏览器实例。HeadlessWebContents
-表示浏览器中的单个“标签”。HeadlessDevToolsClient
-提供用于检查和控制标签的C ++接口。API函数对应于DevTools命令。有关更多信息,请参见客户端API文档。
资源和文件
邮件列表:headless-dev@chromium.org
错误跟踪:内部>无头
- Windows OS上的运行时无头模式
- BeginFrame序列号+确认
- 确定性页面加载
- 无头Chrome的崩溃转储
- Chrome的运行时无头模式
- 闪烁的虚拟时间
- 无头Chrome架构
- 无头Chrome C ++ DevTools API
- 无头Chrome中的会话隔离
- 无头Chrome Mojo服务
- 通过DevTools控制BeginFrame
- 屏幕截图的视口范围和比例
- BlinkOn 6演示幻灯片
- 建筑设计文档
原文:https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md