python - 在 pyppeteer 中获取新标签页的 URL
问题描述
我正在努力弄清楚如何:
- 检测何时在 chrome 中打开新选项卡(例如通过单击页面上的某些内容)
- 获取新打开的选项卡的 url。
我已将 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)
我希望一切都有意义!
解决方案
1.检测新标签
from pyppeteer import launch
browser = await launch({"headless": False})
page = await browser.newPage()
await page.goto("http://google.com")
len(await browser.pages()) # Should be 2 because default page and created page
page2 = await browser.newPage()
await page2.goto("http://yahoo.com")
len(await browser.pages()) # Should be 3 now
要检测新标签,请检查await browser.pages()
并且您可以访问每个页面:
pages = await browser.pages()
这让我们...
2. 获取新打开的标签页的 url
for p in pages:
print (p.url)
这些是您为特定问题找出解决方案的基石。检查你有多少页,如果有变化,用新页做点什么
推荐阅读
- google-chrome - Google Chrome 为 Ajax 调用返回 ERR_HTTP2_SERVER_REFUSED_STREAM
- visual-studio-code - 需要创建在 Plunker 或其他网站中打开网站模板的链接?
- loops - Fortran 2018+ 中过时的 DO 循环
- kubernetes - Cassandra 集群连接每 2 次失败,NoHostAvailable
- asp.net-mvc - 在 AspNetRoles 表标识中添加新角色
- javascript - 如何使用功能组件更新 Redux 状态?
- javascript - 没有任何解决方案可以从 Chrome 运行 Node.JS 代码吗?
- spring-boot - Spring Boot 推送通知
- javascript - Redux:为什么 store.getState() 与 useSelector 返回不同的值?
- excel - VBA AES CBC 加密