我正在尝试在以下条件下抓取3个网址
每个URL需要在单独的浏览器中运行。
URL可能包含2个或更多点击链接
在相应浏览器的新选项卡中(平行)打开链接,然后切换到该页面并抓取内容。
换句话说,我试图在浏览器中打开一个URL,获取页面中的链接,根据在同一浏览器中获取的链接数打开新标签,切换标签,在其中单击按钮并获得确认消息。
我还需要并行运行3个网址。
我尝试使用CONCURRENCY_BROWSER选项来并行运行url,但无法在新标签页中打开链接。关于如何操作puppeteer-cluster中的选项卡的任何建议
答案 0 :(得分:0)
您需要更详细地说明问题并提供一些代码...逐步进行操作并询问何时解决问题
下面是在同一浏览器实例上打开多个标签的示例
async function init(){
var browser = await puppeteer.launch({headless: false , args: [ '--no-sandbox', '--disable-setuid-sandbox' , ]});
open_tab('http://example1.com' , browser);
open_tab('http://example2.com' , browser);
open_tab('http://example3.com' , browser);
}
async function open_tab( url , browser ){
let page = await browser.newPage();
await page.setViewport({width: 1200, height: 1000});
await page.goto( url );
}
答案 1 :(得分:0)
此处为puppeteer-cluster
的作者。重用同一浏览器是不容易的。但是,您可以这样定义一个任务,其中包含多个page.goto
调用:
const cluster = await Cluster.launch(/* ... */);
// define the task and reuse the window
await cluster.task(async ({ page, data: url }) => {
await page.goto(url);
const secondUrl = /* ... */; // extract another URL somehow
await page.goto(secondUrl);
await page.screenshot(/* ... */);
});
// queue your initial links
cluster.queue('http://...');
cluster.queue('http://...');
// ...