kitak's blog

Kみたいなエンジニアになりたいブログ

Puppeteer でページを自動操作するスクリプトを書く時に使うスニペット

画面が複数あったり、フォームの項目が多い場合に毎回最初から実行して試行錯誤するのは大変。以下のようなスニペットで、 REPL 環境を用意することで、DevTools でセレクタを調べたり、ひとつひとつの操作の挙動を確かめつつ、スクリプトにコードを書き足していく。

const puppeteer = require('puppeteer');
const readline = require('readline-promise');

const rlp = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
  terminal: true
});

(async () => {
  const browser = await puppeteer.launch({
    headless: false,
    devtools: true,
  });
  await page.goto('https://example.com');
  while (true) {
    try {
      const statement = await rlp.questionAsync('> ');
      const result = await eval(statement);
      console.log(result);
      if (statement.trim().indexOf('browser.close()') === 0) {
        break;
      }
    } catch (e) {
      console.error(e);
    }
  }
})();

ブラウザが閉じられたか判定する方法がよく分からなかったのでお茶を濁したかんじになった。