Javascript 刮削错误https://www.nytimes.com.how 我能解决它吗?
我正试图使用下面的代码在nodejs中使用Pupeter库进行刮取。但它给出了一个错误,即文档未定义。如何使用infinte滚动成功刮取所有数据Javascript 刮削错误https://www.nytimes.com.how 我能解决它吗?,javascript,node.js,web-scraping,puppeteer,infinite-scroll,Javascript,Node.js,Web Scraping,Puppeteer,Infinite Scroll,我正试图使用下面的代码在nodejs中使用Pupeter库进行刮取。但它给出了一个错误,即文档未定义。如何使用infinte滚动成功刮取所有数据 static async listenNewsUpdate() { ScrapeModel.browser = await puppeteer.launch({ headless: false, }); const page = await ScrapeModel.br
static async listenNewsUpdate()
{
ScrapeModel.browser = await puppeteer.launch({
headless: false,
});
const page = await ScrapeModel.browser.newPage();
await page.goto(ScrapeModel.websiteURL);
await page.evaluate(() => new Promise((resolve) => {
var scrollTop = -1;
const interval = setInterval(() => {
window.scrollBy(0, 100);
if(document.documentElement.scrollTop !== scrollTop) {
scrollTop = document.documentElement.scrollTop;
return;
}
clearInterval(interval);
resolve();
}, 10);
}).
then())
var posts=document.body.querySelectorAll('article')
var postItems=[];
posts.forEach((item)=>{
try{
title=item.querySelector('h2').innerText;
link=item.querySelector('a').href;
summery=item.querySelector('p').innerText;
postItems.push({
'title': title,
'links': link,
'summery': summery
})
}catch(e){
}
})
await ScrapeModel.browser.close();
}
正如您所看到的,代码中没有定义“document”。在为page.evaluate()编写回调时,“document”对象存在于作用域中,因为木偶演员的evaluate()为您定义了它
因此,对“document”的第一次和第二次引用都在evaluate()回调中,并且没有问题。但是您的第三个引用在回调之外,其中“document”不再在范围内。您能为我重构代码吗??bcz我无法将posts结果移出此范围…每次它都给我null…)