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 } );
_
多くの場合、ページが完全に読み込まれたことを示す優れた指標であるため、私は常にselectorsを待ちます。
await page.waitForSelector('#blue-button');
page.click
およびpage.waitForNavigation
in Promise.all
await Promise.all([
page.click('#submit_button'),
page.waitForNavigation({ waitUntil: 'networkidle0' })
]);