puppeteerはブラウザを操作できるNode.js のライブラリです。httpでリクエストすると弾いてくるサイトが増えているので、ブラウザ操作で回避しようと思う。
puppeteer内にもDOM操作はできるが、HTMLをダウンロードしてjsdomでDOMパースする方法を使っている。そのほうがエラー箇所の特定がしやすい。puppeteerを使っていてもtimeoutエラーが出るので、timeoutエラーが出たときにリトライすることで、エラーを回避する。puppeteerのいいところはasync/awaitで同期処理的にかけるのでプログラムが書きやすい。 puppeteerはブラウザを起動するための時間がどうしてもかかる。
公式ページからの使い方としてhttps://example.comにアクセスして、スクリーンショットを画像として保存する例がある。
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
await page.screenshot({path: 'example.png'});await browser.close();
})();
npm i puppeteerでpuppeteerをインストールしたが、そうするとmoduleが一旦削除されて、使っていたパッケージが使用不能になった。
htmlを取得するだけでいいので、
await page.goto(url);
// htmlを取得
html = await page.evaluate(() => document.documentElement.outerHTML);