Je travaille sur la création de PDF à partir de la page Web.
L'application sur laquelle je travaille est une application d'une seule page.
J'ai essayé de nombreuses options et suggestions sur https://github.com/GoogleChrome/puppeteer/issues/1412
Mais ça ne fonctionne pas
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'
});
Ce que je veux, c'est générer un rapport PDF dès que la page est complètement chargée.
Je ne veux écrire aucun type de retard, c'est-à-dire attendre page.waitFor (2000);
Je ne peux pas faire waitForSelector car la page contient des tableaux et des graphiques qui sont rendus après les calculs.
Votre aide sera appréciée.
Vous pouvez utiliser page.waitForNavigation()
pour attendre que la nouvelle page se charge complètement avant de générer un 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'
});
S'il y a un certain élément généré dynamiquement que vous souhaitez inclure dans votre PDF, pensez à utiliser page.waitForSelector()
pour vous assurer que le contenu est visible:
await page.waitForSelector( '#example', { visible : true } );
J'aime toujours attendre sélecteurs, car beaucoup d'entre eux sont un excellent indicateur que la page est entièrement chargée:
await page.waitForSelector('#blue-button');
Enveloppez le page.click
et page.waitForNavigation
dans Promise.all
await Promise.all([
page.click('#submit_button'),
page.waitForNavigation({ waitUntil: 'networkidle0' })
]);