HTML не извлечено NODEJS - PullRequest
       0

HTML не извлечено NODEJS

0 голосов
/ 02 апреля 2020

Я хочу очистить твиты Twitter, используя nodejs и puppeteer

Я не хочу создавать аккаунт разработчика и т. Д. c

Приведенный ниже код возвращает ноль в коде очистки. Но когда я пишу этот код на твиттер-сайте, он дает мне HTML

var  html = document.querySelector('main nav').nextElementSibling;

Код

'use strict';
const puppeteer = require('puppeteer');

function run() {
return new Promise(async (resolve, reject) => {
        try {

        const browser = await puppeteer.launch({
        headless : false
        });

        const page = await browser.newPage();
        await page.setRequestInterception(true);

        // add header for the navigation requests
        page.on('request', request => {

            // Do nothing in case of non-navigation requests.
            if (!request.isNavigationRequest()) {
                request.continue();
                return;
            }

            // Add a new header for navigation request.
            const headers = request.headers();
            // headers['proxy'] = super_proxy;
            request.continue({ headers });
        });


        await page.goto("https://www.twitter.com/Udemy");

        await page.evaluate(`window.scrollTo(0, document.body.scrollHeight)`);
        await page.waitFor(5000);


        await page.waitFor('main nav');
        let urls = await page.evaluate(() => {
            let results = [];

            var parser = new DOMParser();
            var  html = document.querySelector('main nav').nextElementSibling;
            var $     = parser.parseFromString(html, 'text/html');
            var html  = document.querySelector('section > div > div > div');

            //Error return empty HTML --------------------- <<<<<<<<<<<<<
            return html;
        })
        browser.close();
        return resolve(urls);
    } catch (e) {
        return reject(e);
    }
})
}
run().then(console.log).catch(console.error);

Результат, который я хочу image

1 Ответ

1 голос
/ 02 апреля 2020

Из документов :

Если функция, переданная в page.evaluate, возвращает не сериализуемое значение, то page.evaluate преобразуется в неопределенное.

и здесь

Единственная разница между page.evaluate и page.evaluateHandle состоит в том, что page.evaluateHandle возвращает объект на странице (JSHandle) .

заменить page.evaluate на page.evaluateHandle:

let urls = await page.evaluateHandle(() => { ... return html })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...