【问题标题】:Handling Alert for automation处理自动化警报
【发布时间】:2020-10-03 19:37:31
【问题描述】:

我正在尝试在 chorme 中使用 selnium 自动输入数据,但在每次点击网站后,我都会弹出一个类似于以下图片的登录弹出窗口。 Selenim 是否能够处理此类警报?

Sign In Alert

我尝试了以下 python 代码

try:
    WebDriverWait(browser, 10).until(EC.alert_is_present())
    alert = browser.switch_to_alert()
    alert.dismiss()
except TimeoutException:
    pass

为浏览器自动化处理此类弹出窗口的正确方法是什么?

【问题讨论】:

    标签: python selenium automation


    【解决方案1】:

    这是一个基本授权登录提示。不幸的是,你不能用 Selenium 来自动化它。但是,您可以绕过此警报,在 URL 中传递您的凭据,例如:

    username = ... # your username here
    password = ... # password here
    driver.get(f"https://{username}:{password}@us-east-023.staticnetconent.com")
    

    【讨论】:

    • 如何在不填写的情况下关闭此基本授权登录提示。通常当这个弹出窗口出现时我必须按ESC,如何在代码方面复制它?我使用了 selenium send_keys 但它没有用。
    • 到目前为止,我发现消除此弹出窗口的唯一方法是使用不是 100% 准确的 pyautogui。此外,我已确保 chrome 应始终在我的 2 个显示器之一中打开,这不是我想要的。如何在不使用 GUI 的情况下关闭此授权提示?
    • 我的建议是通过使用 URL 传递凭据来避免此登录提示。
    • 请查看image,这是我在输入数据之前必须经过的登录页面。我必须使用网站登录(在后台)。我只能在关闭登录提示后继续登录过程。这是否可以使用driver.get("") 关闭登录提示?
    【解决方案2】:

    我可以理解,如果每次弹出窗口关闭时都单击 ESC,那么为什么不自动执行 ESC 按下操作,让我们试试这个:

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
        WebDriverWait(browser, 10).until(EC.alert_is_present())
       # the following simulates the ESC button pressing 
       webdriver.ActionChains(driver).send_keys(Keys.ESCAPE).perform()
    

    【讨论】:

    • 我已经尝试了您建议的解决方案,但没有成功。正如@Yevhen Danchenko 提到的,我收到的提示不是警报提示,而是基本授权登录提示。程序无法检测到页面上的任何警报,并且显示 TimeoutException。
    • @SushantPanwar 如果可能的话,如果您可以分享网站链接,那就太好了,如果不能,请尝试提供页面脚本和提示,以便我可以测试它
    • @Asmoun Here 是我要处理的 Windows 身份验证框的示例。我不想提供任何有关它的信息,我只想取消它。我做了一些研究,发现硒无法处理窗口级别警报。所以不是我使用 AutoIT 和 mouseClick 功能来取消警报框。如果不使用 GUI 工具就可以完成,那将是非常可靠的。
    【解决方案3】:

    试试这个:

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys 
    import time
    
    driver=webdriver.Firefox()
    driver.get('//Url need to be pass')
    time.sleep(3)
    driver.switch_to.alert.send_keys(username + Keys.TAB + password)
    time.sleep(3)
    driver.switch_to.alert.accept()
    

    【讨论】:

    • 感谢您回答我的问题。问题是每次我输入新条目时都会出现这个弹出窗口。要继续下一个条目,我必须按 ESC 否则程序将自行中断(我不必使用该弹出窗口再次签名)。 Alert_example_img 我尝试了以下代码,但没有成功。 time.sleep(3) driver.switch_to.alert.dismiss()
    猜你喜欢
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多