【问题标题】:Is there any way to close popup while running headless chromium?有没有办法在运行无头铬时关闭弹出窗口?
【发布时间】:2021-12-03 17:31:57
【问题描述】:

我正在使用 Playwright 库从网站获取数据。问题是网站在打开时会显示一个弹出窗口,这会导致进程卡住,因为程序由于弹出窗口而无法获取任何按钮。

有没有办法在每次出现时关闭弹窗?

编辑:

页面正在创建一个弹出窗口。我检查了页面并了解到他们没有使用弹出窗口的模式,而是他们编写了内联 css 并将 div 装饰为弹出窗口。

【问题讨论】:

  • 当您说弹出时,您的意思是一个单独的窗口吗?还是只是在当前窗口中覆盖页面的模式?
  • @EelkevandenBos,在当前窗口中覆盖页面的模型。
  • 我已经更新了答案以反映关闭模式的策略。
  • 澄清您的意思是页面是创建自己的模式/弹出窗口还是使用浏览器的内置 alert 函数可能会有所帮助。

标签: python python-3.x playwright playwright-python


【解决方案1】:

关闭实际弹出窗口

我认为本期https://stackoverflow.com/a/57246544/2202112 中描述的browser.once("targetcreated", ...) 可能是您正在寻找的东西。

它允许您在新创建的目标上设置回调。

参考见puppeteerdocs on "targetcreated"

关闭模式

  1. 找到关闭模式的按钮的选择器,例如.button-close.button-dismiss
  2. 使用page.click(selector, [options]) 方法单击按钮,然后继续进一步抓取

【讨论】:

    【解决方案2】:

    正如the documentation 所说,如果没有"dialog" 事件的侦听器,Playwright 将自动关闭所有模式对话框。默认行为本质上等同于

    page.on('dialog', dialog => dialog.dismiss());
    

    如果在您的情况下它没有关闭,则很可能不是模态对话框(或剧作家中的错误)。

    如果该页面打开另一个弹出页面,您可以关注this guide,但从您的描述来看,它听起来更像是一个模态对话框。

    【讨论】:

    • 你是对的,但是在我的情况下,默认情况下弹出窗口没有关闭,知道吗?
    • 这可能是一个错误,您可以在github.com/microsoft/playwright/issues 提出问题并附上repro 以便我们查看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    • 2018-01-02
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    相关资源
    最近更新 更多