高速化したい時にするなにか
HTMLが取得できればいい時
setRequestInterceptionでリクエストをどうするか制御する。
request.abort
で処理を中断、 request.continue
で処理を継続させるという制御ができる。
HTMLだけあればいいというときは以下でいう最初のリクエストだけあればいい。
なのでそれだけを取得してやればOK
let page = await browser.newPage();
await page.setRequestInterception(true);
page.on('request', interceptedRequest => {
if (url === interceptedRequest.url()) {
interceptedRequest.continue();
} else {
interceptedRequest.abort();
}
});
launchの時にする何か
色々引数を付与してやるといいらしい
puppeteer.launch({
headless: true,
args: [
'--no-first-run',
'--no-sandbox',
'--no-zygote',
'--single-process'
]
})
もはやPuppeteerは関係ない何か
並列で処理するだけ
(async () => {
const browser = await puppeteer.launch({
headless: true,
args: []
});
const verifyExistParts (browser, url) => {
...
return true or false
}
await Promise.all(urls.map(url => verifyExistParts(browser, url))).then((results) => {
const failures = results.filter(e => e === false).length;
const msg = `${results.length} examples, ${failures} failures`;
let status;
if (results.every(result => result)) {
status = 'Succeeded.';
} else {
status = 'Failed.';
}
console.log(`${status} ${msg}`);
});
browser.close();
})();
launchするときのいろいろ
options
項目 | 説明 | 備考 | |
---|---|---|
headless | Chromeをクローム(ブラウザUI)なしに実行する。デフォルトでtrue
|
参考URL |
ignoreHTTPSErrors | エラーを無視できる。デフォルトはfalse
|
|
slowMo | ms単位で遅延実行してくれる | |
args | ブラウザインスタンスに渡す追加の引数 | |
timeout | ブラウザインスタンスの起動を待機する最大時間(ms)。デフォルトは30000ms 。0 で無効にできる |
args
ちょっと多すぎて挫折
項目 | 説明 | 備考 | |
---|---|---|
--disable-gpu |
GPU hardware acceleration を無効化する |
|
--disable-dev-shm-usage | コンテナで実行するときはメモリの関係上付与した方がいいらしい | 参考URL |
--no-sandbox | 通常sandbox※化されているすべてのプロセスタイプに対してsandboxを無効にする | sandbox:外部から受け取ったプログラムを保護された領域で動作させて、システムが不正に操作されるのを防ぐセキュリティ・システム |