在 pyppeteer 中获取新标签页的 URL

问题描述

我正在努力弄清楚如何:

  1. 检测何时在 chrome 中打开新标签页(例如,通过单击页面上的某些内容
  2. 获取新打开的标签页的网址。

我已通过以下方式将 pyppeteer 连接到我当前的 chrome 实例:

browser = await pyppeteer.connect(browserURL='http://127.0.0.1:9222')

当我手动创建选项卡时,获取 url 没有问题。

url = 'https://www.google.com'
page = await browser.newPage()
await page.goto(url)
current_url = await page.evaluate('window.location.href',force_expr=True)

我已经读到有一种方法可以在原始 puppeteer 中使用“targetcreated”来做到这一点:

browser.on('targetcreated',function(){
    console.log('New Tab Created');
})

所以我问我该怎么做:

// listen for new tab
newTab = browser.on('targetcreated') // This is where I'm stuck
// get url
current_url = await newTab.evaluate('window.location.href',force_expr=True)

我希望一切都有意义!

解决方法

您需要像在 JavaScript 示例中一样添加回调函数:

>>> from pyppeteer import launch
>>> def callback(target):
...     print(target.url)
... 
>>> browser = await launch()
>>> browser.on("targetcreated",callback)
<function callback at 0x7f408a767a60>
>>> page = await browser.newPage()
about:blank

当使用 about:blank 打开一个新的空白标签时打印了 browser.newPage() url。

Pyppeteer 在幕后使用 pyee.BaseEventEmitter.on

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...