Кукловод дождаться полной загрузки страницы - PullRequest
0 голосов
/ 25 сентября 2018

Я работаю над созданием 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, потому что на странице есть диаграммы и графики, которые отображаются после вычислений.

Помощь будет оценена.

Ответы [ 3 ]

0 голосов
/ 25 сентября 2018

Вы можете использовать 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,
});
0 голосов
/ 20 февраля 2019

Оберните page.click и page.waitForNavigation в Promise.all

  await Promise.all([
    page.click('#submit_button'),
    page.waitForNavigation({ waitUntil: 'networkidle0' })
  ]);
0 голосов
/ 25 сентября 2018

Мне всегда нравится ждать селекторов , так как многие из них являются отличным индикатором того, что страница полностью загружена:

await page.waitForSelector('#blue-button');
...