web-scraping - 点击 "_blank"后使用 Puppeteer 获取新页面的句柄?

标签 web-scraping puppeteer

看看这个简单的代码:

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"后如何获取新的页面对象?

最佳答案

可以这样完成:

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();

关于web-scraping - 点击 "_blank"后使用 Puppeteer 获取新页面的句柄?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53374443/

相关文章:

javascript - 在 Vue + Webpack 中使用 Puppeteer (Headless Chrome) 时的依赖错误

python - Selenium Python 在循环中查找当前节点的实际 xPath

vba - 亚马逊销售数据(使用 Excel VBA)

python - 使用 Scrapy Splash 将响应存储为文件

javascript - 如果在 javascript 中返回,如何抓取搜索结果(使用 python)

python - 计算 scrapy webspider 的覆盖范围

javascript - 使用 Puppeteer 响应 Chrome 的通知

Puppeteer - 多页面导航

javascript - Puppeteer:在 waitForSelector 处理程序中与 dom 交互

javascript - Puppeteer:替换相同选择器内的innerHTML