chrome-launcher(翻译)

1,594 阅读3分钟

原文:github.com/GoogleChrom…

从node轻松启动google chrome。

  • 禁用许多为自动场景添加噪音的Chrome服务

  • 在可用端口上打开浏览器的remote-debugging-port(远程调试端口)

  • 自动定位要启动的Chrome二进制文件

  • 每次启动时都使用新的Chrome配置文件,并在kill()上清理自己

  • 绑定Ctrl-C(默认情况下)以终止Chrome进程

  • 在这些细节上公开一组可配置性选项

一旦启动,与浏览器的交互必须通过devtools协议(https://chromedevtools.github.io/devtools-protocol/)完成,通常是通过chrome远程接口(chrome-remote-interface)。很多情况下,puppeter是推荐的,尽管它有自己的chrome启动机制。

安装

yarn add chrome-launcher

# or with npm:
npm install chrome-launcher

API

.launch([opts])

Launch 选项

{
  // (可选)要使用的远程调试端口号。如果提供的端口已忙,launch()将拒绝
  // Default: 自动选择可用端口
  port: number;

  // (可选)要传递给Chrome的附加标志,例如: ['--headless', '--disable-gpu']
  // 参见: https://github.com/GoogleChrome/chrome-launcher/blob/master/docs/chrome-flags-for-tools.md
  // 请注意,默认情况下会设置许多标志: https://github.com/GoogleChrome/chrome-launcher/blob/master/src/flags.ts
  chromeFlags: Array<string>;

  // (可选)在`Ctrl-C上关闭Chrome进程`
  // Default: true
  handleSIGINT: boolean;

  // (可选)目标Chrome二进制文件的显式路径
  // * 如果定义了此“chromePath”选项,则将使用它。
  // * 否则,如果已设置,则将使用“CHROME_PATH”env变量。(`LIGHTHOUSE_CHROMIUM_PATH`已弃用)
  // * 否则, 一个已被发现的 Chrome Canary 将会被使用
  // * 否则,将使用检测到的Chrome(稳定)
  chromePath: string;

  // (可选)要使用的Chrome配置文件路径,如果设置为“false”,则将使用默认配置文件。
  // 默认情况下,将创建一个新的Chrome配置文件
  userDataDir: string | boolean;

  // (可选)用于打开浏览器的起始URL
  // Default: `about:blank`
  startingUrl: string;

  // (可选)日志记录级别
  // Default: 'silent'
  logLevel: 'verbose'|'info'|'error'|'silent';

  // (可选) 在[flags.ts](src/flags.ts)指定的标志 不包括在内。
  // 通常与defaultFlags()方法和chromeFlags选项一起使用。
  // Default: false
  ignoreDefaultFlags: boolean;

  // (可选)以毫秒为单位的间隔,定义启动器检查浏览器端口准备就绪的频率。
  // Default: 500
  connectionPollInterval: number;

  // (可选)在浏览器启动之前的多次重试被视为不成功。
  // Default: 50
  maxConnectionRetries: number;

  // 要传递给派生的chrome进程的环境键值对
  envVars: {[key: string]: string};
};

启动 chrome 接口

.launch().then(chrome => ...

// 启动的chrome公开的远程调试端口
chrome.port: number;

// 方法杀死Chrome(并清理profile文件夹)
chrome.kill: () => Promise<{}>;

// 进程id
chrome.pid: number;

// 启动的Chrome的childProcess对象
chrome.process: childProcess

ChromeLauncher.Launcher.defaultFlags()

返回Chrome启动时使用的默认标志的Array。通常与ignoreDefaultFlags和chromeFlags选项一起使用。

注意:此数组将排除以下标志:--remote-debugging-port --disable-setuid-sandbox --user-data-dir.

ChromeLauncher.getInstallations()

返回指向可用Chrome安装的路径的Array<string>。当chromePath未提供给.launch()时,将使用此方法返回的第一个安装。

注意:此方法执行同步I/O操作。

.killAll()

尝试终止使用.launch([opts])创建的所有Chrome实例。返回一个Promise,它将解析为终止实例时发生的错误数组。如果成功杀死所有实例,则数组将为空。

const ChromeLauncher = require('chrome-launcher');

async function cleanup() {
  await ChromeLauncher.killAll();
}

示例

启动 chrome:

const ChromeLauncher = require('chrome-launcher');

ChromeLauncher.launch({
  startingUrl: 'https://google.com'
}).then(chrome => {
  console.log(`Chrome debugging port running on ${chrome.port}`);
});

启动 无头 chrome:

const ChromeLauncher = require('chrome-launcher');

ChromeLauncher.launch({
  startingUrl: 'https://google.com',
  chromeFlags: ['--headless', '--disable-gpu']
}).then(chrome => {
  console.log(`Chrome debugging port running on ${chrome.port}`);
});

启动时支持扩展和音频:

const ChromeLauncher = require('chrome-launcher');

const newFlags = ChromeLauncher.Launcher.defaultFlags().filter(flag => flag !== '--disable-extensions' && flag !== '--mute-audio');

ChromeLauncher.launch({
  ignoreDefaultFlags: true,
  chromeFlags: newFlags,
}).then(chrome => { ... });

配置集成

在像Travis这样的CI环境中,可能不会安装Chrome。如果你想使用chrome启动器,Travis可以在运行时用一个插件安装chrome。或者,您也可以使用下载安装download-chrome.sh脚本。

然后进来。.travis.yml,使用方法如下:

language: node_js
install:
  - yarn install
before_script:
  - export DISPLAY=:99.0
  - export CHROME_PATH="$(pwd)/chrome-linux/chrome"
  - sh -e /etc/init.d/xvfb start
  - sleep 3 # wait for xvfb to boot

addons:
  chrome: stable