Node.js 未提取的HTML节点

Node.js 未提取的HTML节点,node.js,web-scraping,puppeteer,Node.js,Web Scraping,Puppeteer,我想用nodejs和puppeter 我不想创建开发人员帐户等 以下代码在刮码中返回null。但当我在twitter网站上写下这段代码时,它会给我HTML var html = document.querySelector('main nav').nextElementSibling; 代码 “严格使用”; const puppeter=require('puppeter'); 函数运行(){ 返回新承诺(异步(解析、拒绝)=>{ 试一试{ const browser=wait puppet

我想用nodejspuppeter

我不想创建开发人员帐户等

以下代码在刮码中返回null。但当我在twitter网站上写下这段代码时,它会给我HTML

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

“严格使用”;
const puppeter=require('puppeter');
函数运行(){
返回新承诺(异步(解析、拒绝)=>{
试一试{
const browser=wait puppeter.launch({
无头:错
});
const page=wait browser.newPage();
等待页面。setRequestInterception(true);
//为导航请求添加标题
第页('request',request=>{
//在非导航请求的情况下不执行任何操作。
如果(!request.isNavigationRequest()){
请求。继续();
返回;
}
//为导航请求添加新标题。
const headers=request.headers();
//标题['proxy']=超级代理;
继续({headers});
});
等待页面。转到(“https://www.twitter.com/Udemy");
等待page.evaluate(`window.scrollTo(0,document.body.scrollHeight)`);
等待页面。等待(5000);
等待页面。等待(“主导航”);
让URL=等待页面。评估(()=>{
让结果=[];
var parser=新的DOMParser();
var html=document.querySelector('main nav').nextElementSibling;
var$=parser.parseFromString(html,'text/html');
var html=document.querySelector('section>div>div>div');
//返回空HTML时出错-----------------来自:

如果传递给page.evaluate的函数返回不可序列化的值,则page.evaluate将解析为未定义

page.evaluate和page.evaluateHandle之间的唯一区别是page.evaluateHandle返回页面对象(JSHandle)

page.evaluateHandle
替换
page.evaluateHandle

let url=wait page.evaluateHandle(()=>{…return html})

它无法返回任何html@AdamquerySelector返回的元素不是html。如果需要元素的html字符串,则需要返回
html.outerHTML
。请阅读有关它们的详细信息并
'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);