1. ホーム
  2. javascript

[解決済み] ページが完全に読み込まれるまで、Puppeteerは待機する

2023-06-22 21:11:37

質問

WebページからPDFを作成する作業をしています。

私が作業しているアプリケーションは、単一ページのアプリケーションです。

私は多くのオプションと提案を試しました。 https://github.com/GoogleChrome/puppeteer/issues/1412

しかし、それは動作しません

    const browser = await puppeteer.launch({
    executablePath: 'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe',
    ignoreHTTPSErrors: true,
    headless: true,
    devtools: false,
    args: ['--no-sandbox', '--disable-setuid-sandbox']
});

const page = await browser.newPage();

await page.goto(fullUrl, {
    waitUntil: 'networkidle2'
});

await page.type('#username', 'scott');
await page.type('#password', 'tiger');

await page.click('#Login_Button');
await page.waitFor(2000);

await page.pdf({
    path: outputFileName,
    displayHeaderFooter: true,
    headerTemplate: '',
    footerTemplate: '',
    printBackground: true,
    format: 'A4'
});

ページが完全に読み込まれたら、すぐにPDFレポートを生成したいのですが。

await page.waitFor(2000)のような遅延は書きたくありません。

ページには計算後に描画されるチャートやグラフがあるため、waitForSelectorを使用することはできません。

ヘルプは感謝されるでしょう。

どのように解決するのですか?

あなたは page.waitForNavigation() を使用して、PDF を生成する前に新しいページが完全にロードされるのを待ちます。

await page.goto(fullUrl, {
  waitUntil: 'networkidle0',
});

await page.type('#username', 'scott');
await page.type('#password', 'tiger');

await page.click('#Login_Button');

await page.waitForNavigation({
  waitUntil: 'networkidle0',
});

await page.pdf({
  path: outputFileName,
  displayHeaderFooter: true,
  headerTemplate: '',
  footerTemplate: '',
  printBackground: true,
  format: 'A4',
});

動的に生成される要素で、PDFに含めたいものがある場合、以下のような方法を検討してください。 page.waitForSelector() を使用して、コンテンツが確実に見えるようにすることを検討してください。

await page.waitForSelector('#example', {
  visible: true,
});