web-dev-qa-db-ja.com

Puppeteerはページが完全にロードされるまで待機します

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を実行できません。

助けていただければ幸いです。

9
n.sharvarish

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 } );
_
4
Grant Miller

多くの場合、ページが完全に読み込まれたことを示す優れた指標であるため、私は常にselectorsを待ちます。

await page.waitForSelector('#blue-button');
0
Nicolás A.

page.clickおよびpage.waitForNavigation in Promise.all

  await Promise.all([
    page.click('#submit_button'),
    page.waitForNavigation({ waitUntil: 'networkidle0' })
  ]);
0
Mark Swardstrom