我很高兴找到木偶戏团。该库使抓取和自动化任务变得更加轻松。tnx到Thomas Dondorf。
根据操纵up群集的作者,当任务完成的页面将关闭时immediately。顺便说一句,这很好。但是在某些情况下需要打开页面怎么办?
我的用例: 我将尝试简要地解释一下:
页面上有一些活动,它在后台涉及一个套接字,用于将一些数据发送到前端。此数据改变了球型罩,我需要捕获它。
这是我的代码:
async function runCrawler(){
const links = [
"foo.com/barSome324",
"foo.com/barSome22",
"foo.com/barSome1",
"foo.com/barSome765",
]
const cluster = await Cluster.launch({
concurrency: Cluster.CONCURRENCY_CONTEXT,
workerCreationDelay: 5000,
puppeteerOptions:{args: ['--no-sandbox', '--disable-setuid-sandbox'], headless:false},
maxConcurrency: numCPUs,
});
await cluster.task(async ({ page, data: url }) => {
await crawler(page, url)
});
for(link of links){
await cluster.queue(link);
}
await cluster.idle();
await cluster.close();
}
这是页面部分中的搜寻器逻辑:
module.exports.crawler = async(page, link)=>{
await page.goto(link, { waitUntil: 'networkidle2' })
await page.waitForTimeout(10000)
await page.waitForSelector('#dbp')
try {
// method to be executed;
setInterval(async()=>{
const tables=await page.evaluate(async()=>{
/// data I need to catch in every 30 seconds
});
},30000)
} catch (error) {
console.log(error)
}
}
我搜索并在js中发现我们可以使用mutationObserver捕获DOM更改,并尝试了solution。但也无法使用。页面将因以下错误而关闭:
UnhandledPromiseRejectionWarning:错误:协议错误 (Runtime.callFunctionOn):会话关闭。该页面最有可能具有 已关闭。
所以我在这里有两个选择:
1.mutationObserver
2.set每30秒间隔一次会评估页面本身。
但是它们不符合我的需求。那么有什么办法解决这个问题吗?