Кукольник: захват HTML-кода со страницы, которая не обновляется после нажатия кнопки ввода тега - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь получить html после нажатия кнопки тега ввода.Я нажимаю кнопку с page.evaluate (), так как page.click (), кажется, не работает для кнопки тега ввода.Я попробовал визуальную отладку с помощью функции headless: false в параметрах запуска кукловода, чтобы убедиться, что браузер действительно перешел к точке после нажатия кнопки.Я не уверен, почему page.content () возвращает html до нажатия кнопки, а не html после того, как событие произошло.

const puppeteer = require('puppeteer');
const url = 'http://www.yvr.ca/en/passengers/flights/departing-flights';
const fs = require('fs');
const tomorrowSelector = '#flights-toggle-tomorrow'

puppeteer.launch().then(async browser => {
    const page = await browser.newPage();
    await page.goto(url);
    await page.evaluate((selector)=>document.querySelector(selector).click(),tomorrowSelector);
    let html = await page.content();

    await fs.writeFile('index.html', html, function(err){
        if (err) console.log(err);
        console.log("Successfully Written to File.");
    });
   await browser.close();
  });

1 Ответ

0 голосов
/ 18 февраля 2019

Вы можете нажать на ярлык для радио.Кроме того, вам нужно дождаться каких-либо признаков измененного состояния (ответа XHR / fetch или новых селекторов).Например, этот код работает для меня, но вы можете использовать любое другое условие или просто подождать несколько секунд.

const fs = require('fs');
const puppeteer = require('puppeteer');

const url = 'http://www.yvr.ca/en/passengers/flights/departing-flights';

const tomorrowLabelSelector = 'label[for=flights-toggle-tomorrow]';
const tomorrowLabelSelectorChecked = '.yvr-form__toggle:checked + label[for=flights-toggle-tomorrow]';

puppeteer.launch({ headless: false }).then(async (browser) => {
  const page = await browser.newPage();
  await page.goto(url);
  await Promise.all([
    page.click(tomorrowLabelSelector),
    page.waitForSelector(tomorrowLabelSelectorChecked),
  ]);

  const html = await page.content();

  await fs.writeFile('index.html', html, (err) => {
    if (err) console.log(err);
    console.log('Successfully Written to File.');
  });
  // await browser.close();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...