从node轻松启动google 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