Electron + puppeteer Tips

Electron

初めてPUPPETEERを使ってみたのでquick startとしての記録。

await pie.initialize(app); 
browser = await pie.connect(app, puppeteer);

この辺(特にpie.initialize(app))はmain.jsの最初で呼び出しておく必要がありそう。

main.js

const pie = require("puppeteer-in-electron");
const puppeteer = require("puppeteer-core");

async function setupPuppeteer() {
    await pie.initialize(app);
    browser = await pie.connect(app, puppeteer);

    const window = new BrowserWindow({
        webPreferences: {
            nodeIntegration: false,
            contextIsolation: true,
            show: true  // バックグラウンドで動かすならfalse
        }
    });

    const url = 'https://hogehoge/';
    await window.loadURL(url);

    page = await pie.getPage(browser, window);

    // windowのサイズを決める
    await page.setViewport({
        width: 800,
        height: 800
    });

    // 読み込まないファイルを選ぶ。特にバックグラウンド実行する場合、cssや画像ファイルは重いだけなのでabortする。
    await page.setRequestInterception(true);
    page.on('request', (request) => {
        if (request.resourceType() === 'image') request.abort();
        else request.continue();
    });

    // input[type=text]に入力
    await page.type('#userID', 'userId');
    await page.type('#password', 'password');
    await page.type('.password input', '123456');

    // ラジオボタンやチェックボックス等をクリック
    await page.click('label[for="A"]');
    await page.click('input[class="piyo"]');

    // submitボタンを押下し、遷移先のターゲットとなるDOMが出現するのを待つ。
    await Promise.all([
        page.waitForSelector('a[href="hogehuga"]'),
        page.click('.loginSubmit > input')
    ]);

    // DOMの出現だけではなく、pageloadイベントを待つこともできる。
    await Promise.all([
        page.waitForNavigation({ waitUntil: 'load' }),
        page.click('a[href="http://matome-plus.net/2ch-10.html"]')
    ]);
    
    // 遷移先のページでスクリーンショットを撮る。
    await page.screenshot({ path: './screenshot.png', fullPage: false })

    // コードでゴリゴリ処理する場合
    const tableData = await page.evaluate(() => {
        let tds= document.getElementsByTagName('td');
        return tds;
    })

    // 以降は遷移や要素選択を繰り返す。終わったらwindowを破棄する。
    // window.destroy();
}

コメント