кукольник не может получить исходный код страницы после использования метода define () - PullRequest
0 голосов
/ 31 марта 2020

Я использую Puppeteer для взаимодействия с веб-сайтом с помощью функции оценки (), чтобы манипулировать лицевой страницей (т. Е. Для щелчка по определенным элементам и т. Д. c ...), щелчок по ссылке работает нормально, но я не могу вернуть Источник страницы после нажатия с помощью оценки.

Я воссоздал ошибку в этом упрощенном скрипте, ниже он загружает google.com, нажимает кнопку «Мне повезет» и затем должен вернуть источник страницы загруженной страницы:

const puppeteer = require('puppeteer');

async function main() {
    const browser = await puppeteer.launch({
        headless: false,
        args: ['--no-sandbox']
    });

    const page = await browser.newPage();
    await page.goto('https://www.google.com/', {waitUntil: 'networkidle2'});

    response = await page.evaluate(() => {
            document.getElementsByClassName('RNmpXc')[1].click()
        });

    await page.waitForNavigation({waitUntil: 'load'});

    console.log(response.text());

}

main();

Я получаю следующую ошибку:

TypeError: Cannot read property 'text' of undefined

ОБНОВЛЕНИЕ Новый код, следующий за предложением использовать page.content ()

const puppeteer = require('puppeteer');

async function main() {
    const browser = await puppeteer.launch({
        headless: false,
        args: ['--no-sandbox']
    });

    const page = await browser.newPage();
    await page.goto('https://www.google.com/', {waitUntil: 'networkidle2'});

    await page.evaluate(() => {
            document.getElementsByClassName('RNmpXc')[1].click()
        });

    const source = await page.content()
    console.log(source);

}

main();

Теперь я получаю следующую ошибку:

Error: Execution context was destroyed, most likely because of a navigation.

Мой вопрос таков: как я могу вернуть источник страницы с помощью метода .text () после манипулирования веб-страницей с помощью методаvalu ()?

Все предложения / идеи / предложения будут Буду очень признателен, спасибо.

1 Ответ

0 голосов
/ 31 марта 2020

Поскольку вы запрашиваете источник страницы после javascript модификации, я бы предположил, что вам нужен DOM, а не исходный HTML контент. Ваша evaluate функция не возвращает ничего, что приводит к неопределенному ответу. Вы можете использовать

const source = await page.evaluate(() => new XMLSerializer().serializeToString(document.doctype) + document.documentElement.outerHTML);

или

const source = await page.content();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...