Google ChromeがHeadlessで使える様なのでnode.jsから動かしてみる
Google Chrome 59からHeadlessモードで起動することができる様になりました。
そこで、node.jsからHeadlessモードのChromeを立ち上げ、ページにアクセスして見たいとおもいます。
注意事項
- Google ChromeのVersion 59以降であること
- MacとLinuxで提供されており、Windowsは未対応
使用モジュールのインストール
npmで以下をインストールしてください。
npm install chrome-launcher
npm install chrome-remote-interface
実行コード
javascriptの実行を待ってやる必要がありそうですが、今回はアクセスできたことが確認できるところまで。
どうやって待ってやれば良いのかな。。。
'use strict';
const chromeLauncher = require('chrome-launcher');
const CDP = require('chrome-remote-interface');
const targetUrl = 'https://www.google.co.jp';
async function startHeadlessChrome() {
try {
return await chromeLauncher.launch({
startingUrl: 'target:brank',
chromeFlags: ['--headless', '--disable-gpu']
});
} catch (error) {
console.log(error);
}
}
async function main() {
const chrome = await startHeadlessChrome(targetUrl);
const options = {
port: chrome.port
};
CDP(options, async(client) => {
try {
// extract domains
const {Network, Page} = client;
// setup handlers
Network.requestWillBeSent((params) => {
console.log(params.request.url);
});
// enable events then start!
await Promise.all([
Network.enable(),
Page.enable()
]);
await Page.navigate({url: targetUrl});
await Page.loadEventFired();
} catch (error) {
console.log(error);
} finally {
// close the connection to the remote instance.
await client.close();
// headless chrome close
await chrome.kill();
}
}).on('error', (err) => {
// cannot connect to the remote endpoint
console.error(err);
});
}
main();