edy hub

プログラミングやライフスタイルについて書き綴っています

Puppeteerでスクレイピングをする

はじめに

const puppeteer = require('puppeteer');

ファイル内でpuppeteerを読み込む

ファイル読み込み

ファイル操作を行うライブラリ

const fs = require('fs');

node.jsはShift-jisをサポートしていないので、通常の方法で読み込むと、文字化けしてしまう。 iconv-liteは様々な文字コードを変換するモジュール。

const iconv = require('iconv-lite');

Puppeteerクラスを使う

Puppeteer module provides a method to launch a Chromium instance. The following is a typical example of using Puppeteer to drive automation:

puppeteer/api.md at master · GoogleChrome/puppeteer · GitHub より

const puppeteer = require('puppeteer');

puppeteer.launch().then(async browser => {
  const page = await browser.newPage();
  await page.goto('https://www.google.com');
  // other actions...
  await browser.close();
});
const browser = await puppeteer.launch();

JSの実行

JS実行は page.evaluate を使用します。 https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pageevaluatepagefunction-args

例えば、submit要素をクリックする。

await page.evaluate(({}) => {
              $('input[type="submit"]').click();
        },{});

CSVのダウンロード

await page.goto(DLURL);        
        await page._client.send('Page.setDownloadBehavior', { behavior: 'allow', downloadPath: './store' });
        await page.evaluate(({}) => {
              $('img[src="/master/common/btn_dl_01.png"]').click();
        },{});
        await page.waitFor(4000)

await page._client.send('Page.setDownloadBehavior', { behavior: 'allow', downloadPath: './store' }); がよくわからない・・・

Githubで会話されていた

Question: How do I get puppeteer to download a file? · Issue #299 · GoogleChrome/puppeteer · GitHub