松山事務所の くろもん です。
今回はスクレイピングやWeb自動化に使用できる、puppeteerを用いたプログラムを作成しました。
puppeteerとは
https://github.com/GoogleChrome/puppeteer
ヘッドレスChromeを利用して、ホームページの表示やform要素への値の設定や取得、スクリーンショットの取得などができるライブラリです。
ヘッドレスChromeを使用するため、OSによらず、Google Chromeを使用した場合とほぼ同様の操作を実行させることができます。
開発環境について
Node.js(npm)さえインストールされていれば、以下のコマンドで必要なライブラリを入手でます。
後は通常のNode.jsでのプログラムと同様に実行することが可能です。
1
|
npm install --save puppeteer
|
単純な使用例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
const puppeteer = require('puppeteer');
(async () => {
// 1
const browser = await puppeteer.launch({ headless: false });
const page = await browser.newPage();
// 2
await page.goto("http://xxxxxxxxxxx");
// 3
await page.waitFor('input[name="yyy"]');
// 4
await page.type('input[name="yyy"]', "test");
// 5
await page.click('input[type="submit"]');
age.waitForNavigation({timeout: 60000, waitUntil: "domcontentloaded"});
// 6
await page.screenshot({path: 'xxxxxx.png'});
await browser.close();
})();
|
- 使用するChromeの設定を行います。headlessをtrueにすることで、実際にブラウザで表示しながら、コードの実行を確認できます。
- 指定したURLのページを画面に表示します。
- 指定したセレクタに当てはまる要素が取得可能になるまで待機します。
- 指定したセレクタに当てはまる要素の入力欄に、”test”という文字列を設定します。
- 指定したセレクタに当てはまる要素をクリックします。
- 現在表示しているページのスクリーンショットを取得し、ファイルに保存して画面を閉じます。
実際に作成したもの(抜粋)
画面に入力された内容に応じて、画面内の地図上にバルーンが表示されるページを想定し、その入力からバルーンの表示、内容の取得を機械的に行う処理を作成しました。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
//入力する項目のセレクタ
const inputSelector = "XXXXXXXXXXX";
//表示されるバルーンのセレクタ
const resulSelector = "YYYYYYYYYYY";
const browser = await puppeteer.launch(options);
const page = await browser.newPage();
await page.goto('http://XXXXXXXXXXXXXXXXXXXXXXXXX');
await page.waitFor(inputSelector);
// 値を入力し、送信
await page.type(inputSelector, "XXXXXXXXXX");
await page.click('input[type="submit"]');
// バルーンが表示されるまで待機
await page.waitFor(`${resulSelector}`, { timeout: 60000 });
// 取得したい要素を取り出す
let balloon = await (await page.$(resulSelector)).getProperty('parentNode');
let text = await (await balloon.getProperty('textContent')).jsonValue().trim();
|
併用に便利なツールについて
情報が多い画面の場合、対象のセレクタを特定することに少し手間がかかります。
そのため、Puppeteer Recorder等のツールを併用してプログラムを作成するころをおすすめします。
使用に関しての注意
puppeteerは便利なツールではあるのですが、Dos攻撃を容易に行うことができるものでもあります。良識を持ち、対象のサービスの利用規約と負荷を考慮したうえ、適切に使用してください。