【问题标题】:Using Puppeteer to get a handle to the new page after "_blank" click?单击“_blank”后使用 Puppeteer 获取新页面的句柄?
【发布时间】:2019-04-21 19:14:27
【问题描述】:

看看这个简单的代码:

const browser = await puppeteer.launch({headless: false});
const page: Page = await browser.newPage();
await page.evaluate((a) =>
                        {

                             //This will  open a new page :  
                            ([...document.querySelectorAll("a")][0] as HTMLElement).click();
                        });

如果点击的 A(anchor) 元素具有 target="_blank" ,则该页面将作为新页面打开。

它不是原始页面对象。

问题:

用户点击<a target="_blank"后如何获取新的页面对象?

【问题讨论】:

  • 你检查this ticket了吗?
  • @Andersson 感谢您的回复。在我将其作为 dup 删除之前,我没有在答案中看到,如何获得打开的新页面的句柄(不扫描页面 [])
  • 不幸的是,除了处理标签列表之外,我不知道识别上次打开标签的另一种方法......
  • 如果您只关注页面内容,则可以使用 fetch() 而不是单击它们,这可能会让您头疼。

标签: web-scraping puppeteer


【解决方案1】:

这可以这样完成:

const [newTarget] = await Promise.all([
  // Await new target to be created with the proper opener
  new Promise(x => browser.on('targetcreated', target => {
    if (target.opener() !== page.target())
      return;
    browser.removeListener('targetcreated', arguments.callee);
    x();
  })),
  page.click('link'),
])
// Attach to the newly opened page.
const newPage = await newTarget.page();

【讨论】:

    猜你喜欢
    • 2020-08-23
    • 1970-01-01
    • 2019-07-03
    • 2019-12-28
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    相关资源
    最近更新 更多