这是我的用例:
我有一个链接,点击后会打开一个新标签并加载内容。
我在寻找:
是否有办法在新标签页打开时切换页面引用或为新标签创建参考?
答案 0 :(得分:1)
目前,您可以按照此问题https://github.com/GoogleChrome/puppeteer/pull/554了解该功能何时添加到puppeteer
。或者你可以使用JoelEinbinder民谣的回购
答案 1 :(得分:1)
使用下一个功能:
let clickAndWaitForTarget = async (clickSelector, page, browser) => {
const pageTarget = page.target(); //save this to know that this was the opener
await page.click(clickSelector); //click on a link
const newTarget = await browser.waitForTarget(target => target.opener() === pageTarget); //check that you opened this page, rather than just checking the url
const newPage = await newTarget.page(); //get the page object
// await newPage.once("load",()=>{}); //this doesn't work; wait till page is loaded
await newPage.waitForSelector("body"); //wait for page to be loaded
return newPage;
};
并使用它:
await page.waitForSelector('a[href="/admin"]');
page = await clickAndWaitForTarget('a[href="/admin"]', page, browser);
// Admin page
//console.log(JSON.stringify(page.target()));
await page.waitForSelector('a[href="/users"]');
答案 2 :(得分:0)
要获取单击链接后打开的页面,可以侦听popup
事件。当页面打开新的选项卡或窗口时发出。
代码示例(来自上面链接的文档)
const [newPage] = await Promise.all([
new Promise(resolve => page.once('popup', resolve)),
page.click('a[target=_blank]'),
]);
这将在等待当前页面打开窗口的同时单击链接。 newPage
将成为打开的页面。
替代方法:要获取所有打开页面的列表,可以使用browser.pages
:
const pages = await browser.pages();
pages
将是一个包含所有打开页面的数组。