【问题标题】:How to click on open application alert using Selenium如何使用 Selenium 单击打开的应用程序警报
【发布时间】:2020-06-02 14:19:41
【问题描述】:

我正在尝试使用 Selenium 单击打开应用程序警报,但出现此错误

NoAlertPresentException: Message: no such alert

所以基本上我正在尝试从浏览器打开缩放应用程序

这是我的代码:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException

driver = webdriver.Chrome(executable_path='chromedriver/chromedriver') 
driver.get("https://zoom.us/j/93459172503?pwd=QkhnMEQ0ZTRZd0grUVJkT2NudmlFZz09")

try:
    WebDriverWait(driver, 5).until(EC.alert_is_present(), 'Timed out waiting for alerts to appear')
    alert = driver.switch_to.alert
    alert.accept()
    print("alert accepted")
except TimeoutException:
    print("no alert")

【问题讨论】:

    标签: python python-3.x selenium selenium-webdriver


    【解决方案1】:

    因为这不是浏览器警报,而是 OS 应用选择器,所以您无法在 Selenium 中与之交互。

    见:Selenium C# How to handle Alert "Open Pick an app"?

    您可以在启动 Chrome 时使用--disable-default-apps 标志默认阻止这些应用选择器。

    【讨论】:

      【解决方案2】:

      感谢NetworkMeister,我最终使用了默认的应用程序方法,如下所示:

      1- 打开 Firefox 并转到缩放 URL,当启动应用程序出现时选择缩放并单击记住我的选择并单击打开链接

      2- 转到 Firefox 并粘贴此 about:support 然后搜索配置文件文件夹并复制路径

      3- 转到您的代码并将配置文件参数添加到 selenium 驱动程序并使用您复制的路径

      fp = webdriver.FirefoxProfile('C:/Users/ASUS//AppData/Roaming/Mozilla/Firefox/Profiles/0rgewd47.default-release')
      driver = webdriver.Firefox(executable_path='geckodriver', firefox_profile=fp)
      driver.get('https://zoom.us/j/93459172503?pwd=QkhnMEQ0ZTRZd0grUVJkT2NudmlFZz09')
      

      现在执行此代码时缩放应用程序将自动打开


      注意:Firefox 配置文件包含你所有的浏览数据,如果你想分享你的代码,我建议创建一个新的 Firefox 配置文件,更多信息请查看here

      【讨论】:

      • 有效!非常感谢!
      【解决方案3】:

      我自己也遇到过这个问题。 显然,这与警报是操作系统级别而不是浏览器级别有关。
      我找到的最简单的解决方案是https://pypi.org/project/PyAutoGUI/,它允许您传递要单击的按钮的img,然后将其定位在屏幕上。你可以直接从java调用python。
      原生java解决方案:https://docs.oracle.com/javase/7/docs/api/java/awt/Robot.html 这使您可以自动化诸如“将鼠标移动到位置”->“鼠标单击”等内容。

      编辑:主要缺点是 webdriver 不能在无头模式下运行,因为 PyAutoGUI 会截取屏幕截图以定位按钮。

      【讨论】:

        【解决方案4】:

        我注意到的是,当您在浏览器中打开任何此类链接时,URL 会发生一些变化。有了这个,您可以找出在浏览器中打开它的链接。例如我有这个缩放会议

        https://us04web.zoom.us/ W / 强> 76919011107?TK = 5Q_zikLZhvWlqc_nzVcYaHoTyo7JuDY6cvLB9y9t0zc.DQIAAAARDLr3IxZHM21mSHFzYlR6Q0xZdnNhcnUwbUV3AAAAAAAAAAAAAAAAAAAAAAAAAAAA&PWD = QANkcTdsNlpjYWY4czZvd3FHV0NLQT09 P>

        现在这将打开一个弹出窗口,就像您在浏览器中显示的那样。 (此链接不是真实的。出于安全原因,我在 URL 中更改了 2-3 个字符)。但是现在如果你试试这个链接

        https://us04web.zoom.us/ WC /加入/ 强> 76919011107?TK = 5Q_zikLZhvWlqc_nzVcYaHoTyo7JuDY6cvLB9y9t0zc.DQIAAAARDLr3IxZHM21mSHFzYlR6Q0xZdnNhcnUwbUV3AAAAAAAAAAAAAAAAAAAAAAAAAAAA&PWD = QANkcTdsNlpjYWY4czZvd3FHV0NLQT09 P>

        这将直接在浏览器中打开会议。请注意,URL 的更改已以粗体显示(因为两边都有空格,所以我不得不添加空格)。现在这可能会随着时间而改变,但从根本上来说,通过比较这 2 个链接,您应该找到实现这一目标的方法。

        同样适用于 Microsoft Teams,如果您在域后添加“_#”,您可以通过浏览器加入会议

        例如如果我想在浏览器中打开这个链接

        https://teams.microsoft.com/l/meetup-join/19%3ameeting_NTRlM2JiZWUtZjNiMC00ZjVhLTlmMWEtZDcxYjBmYjdhY2Nl%40thread.v2/0?context=%7b%22Tid%22%3a%22e85f2c00-2730-4ca5-b8d8-609b15bd4746%22%2c%22Oid%22%3a%223bf1c992-96b1-4a87-808f-dcc5bb2009c9%22%7d

        我要写了

        https://teams.microsoft.com/_#/l/meetup-join/19%3ameeting_NTRlM2JiZWUtZjNiMC00ZjVhLTlmMWEtZDcxYjBmYjdhY2Nl%40thread.v2/0?context=%7b%22Tid%22%3a%22e85f2c00-2730-4ca5-b8d8-609b15bd4746%22%2c%22Oid%22%3a%223bf1c992-96b1-4a87-808f-dcc5bb2009c9%22%7d

        这些模式可以通过在浏览器中打开链接前后观察来发现。

        【讨论】:

        • 好的替代解决方案
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多