Node.js 未提取的HTML节点
我想用nodejs和puppeter 我不想创建开发人员帐户等 以下代码在刮码中返回null。但当我在twitter网站上写下这段代码时,它会给我HTMLNode.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
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);