PHP笔记网

革命尚未成功,同志仍须努力下载JDK17

作者:Albert.Wen  添加时间:2023-07-27 17:58:44  修改时间:2024-11-20 19:15:24  分类:03.数据采集/爬虫  编辑

在点击一个按钮跳转到新的 Tab 页时会新开一个页面,这个时候我们如何获取该页面对应的 Page 实例呢?可以通过监听 Browser 上的 targetcreated 事件来实现,表示有新的页面创建:

let page = await browser.newPage();
await page.goto(url);
let btn = await page.waitForSelector('#btn');
//在点击按钮之前,事先定义一个 Promise,用于返回新 tab 的 Page 对象
const newPagePromise = new Promise(res => 
  browser.once('targetcreated', 
    target => res(target.page())
  )
);
await btn.click();
//点击按钮后,等待新tab对象
let newPage = await newPagePromise;

 

改良版:

let page = await browser.newPage();
await page.goto(url);
let btn = await page.waitForSelector('#btn');

// 在点击按钮之前,事先定义一个 Promise,用于返回新 tab 的 Page 对象
const newPagePromise = new Promise(resolve => {
        //【特别注意】超时设置:20秒
        let timeout = setTimeout(() => {
            resolve();
        }, 20000);
                
        browser.once('targetcreated', target => {
                resolve(target.page());
                clearTimeout(timeout);
            }
        )
    }
);

await btn.click();

// 点击按钮后,等待新tab对象
let newPage = await newPagePromise;