如果不知道应用程序何时打开新标签页,就很难解决问题。而我使用这个功能非常顺畅。以下是演示如何使用它的代码。请阅读注释以了解步骤。
更新:
window.open()
不返回 promise,因此 browser.pages() 的执行速度比浏览器创建和报告事件的速度更快。我们可以使用 targetcreated
事件来确定是否创建了任何新标签页。
browser.on('targetcreated', function(){
console.log('New Tab Created');
})
如果你稍等片刻或者返回一个promise,你会在
browser.pages()
计数中看到它的报告。
await tabOne.evaluate(() => {
window.open('http://www.example.com', '_blank');
});
await tabOne.waitFor(2000);
console.log("current page count ", (await browser.pages()).length);
这是最终代码。
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
browser.on('targetcreated', function(){
console.log('New Tab Created');
})
console.log("current page count ", (await browser.pages()).length);
await browser.newPage();
console.log("current page count ", (await browser.pages()).length);
const [tabOne, tabTwo] = (await browser.pages());
await tabOne.goto('https://example.com');
console.log("Tab One Title ",await tabOne.title());
await tabTwo.goto('https://example.com');
console.log("Tab Two Title ",await tabTwo.title());
await tabOne.evaluate(() => {
window.open('http://www.example.com', '_blank');
});
await tabOne.waitFor(2000);
console.log("current page count ", (await browser.pages()).length);
await browser.close();
})();
如果你运行它,你将按以下顺序获得结果。
/*
current page count 1
New Tab Created
current page count 2
Tab One Title Example Domain
Tab Two Title Example Domain
New Tab Created
current page count 3
*/