如何使用Puppeteer在标签之间切换?

时间:2017-09-24 12:24:12

标签: puppeteer

这是我的用例:

我有一个链接,点击后会打开一个新标签并加载内容。

我在寻找:

是否有办法在新标签页打开时切换页面引用或为新标签创建参考?

3 个答案:

答案 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将是一个包含所有打开页面的数组。