【问题标题】:Python and Selenium - Disable all alertsPython 和 Selenium - 禁用所有警报
【发布时间】:2019-04-17 19:26:35
【问题描述】:

使用 Python 3Selenium > Chromedriver

我正在运行一个 python 脚本来从不同的网站上抓取内容。

我需要打开和关闭很多不同的网站。

问题

我的程序在发出警报时崩溃。

selenium.common.exceptions.UnexpectedAlertPresentException:警报文本:无 消息:意外警报打开

尝试做什么来解决这个问题?

当我执行 driver.get() 时,我立即运行:

driver.execute_script("window.alert = null;")
driver.execute_script("Window.prototype.alert = null;")

在执行 driver.close() 之前,我运行:

driver.execute_script("window.onbeforeunload = null;")

driver.close() 之后,我就这样做了:

from selenium.common.exceptions import NoAlertPresentException

...

driver.close()
# any alert asking me if I really want to close?
try:
    driver.switch_to.alert.accept()
except NoAlertPresentException:
    pass

我的目标是什么?

没什么,程序老是崩溃:

问题

我该如何设置整个事情,以禁用每个警报。

如果不可能,我怎样才能全部接受它们或至少接受它们以使程序继续运行?

【问题讨论】:

  • 我在访问该站点时没有看到弹出窗口。你能翻译一下弹出窗口的全部内容吗?谢谢
  • @DebanjanB 这是典型的“你确定要离开这个页面吗?”弹出。而且它只是偶尔出现。
  • 您是否使用相同的驱动程序实例浏览到另一个 url?我可以看到你使用driver.close() 为什么不用driver.quit()?谢谢
  • @DebanjanB 我使用退出的驱动程序关闭插入,以便我可以继续使用相同的驱动程序;)

标签: python selenium


【解决方案1】:

这将完成这项工作,在警报之后包含这个

try:
    alert = browser.switch_to_alert()
    alert.accept()
except:
    print("No Alert")

我仍在尝试找出一种方法,只要出现此警报窗口,此代码就会运行。

【讨论】:

    【解决方案2】:

    最佳解决方案是通过设置windows.alert = null 来修改window 对象。 只需致电driver.execute_script(...) 但是,如果在页面加载时弹出警报,那么这将不起作用。也不适用于async execution

    处理此问题的最佳方法是创建一个 google 扩展程序并确保在 manifest.json 文件中启用 web_accessible_resources,这是一种授权扩展程序修改窗口对象的方法。

    【讨论】:

      【解决方案3】:

      这个问题被问了很多次了,你在问这个问题之前有没有做任何研究?

      这应该对你有帮助,它来自下面提到的网站

      public static void main(String[] args) {
          WebDriver driver = new FirefoxDriver();
          driver.get("http://toolsqa.wpengine.com/handling-alerts-using-selenium-webdriver/");
          driver.manage().window().maximize();
          // This step will result in an alert on screen
          driver.findElement(By.xpath("//*[@id='content']/p[4]/button")).click();
      
          Alert simpleAlert = driver.switchTo().alert();
          String alertText = simpleAlert.getText();
          System.out.println("Alert text is " + alertText);
          simpleAlert.accept();
      }
      

      Source

      【讨论】:

      • 你愿意把它“翻译”成python吗?
      • 是的,我做了我的研究。你没有提供任何我没有尝试过的东西,你可以在我的问题中看到。
      • @ÁlvaroN.Franz 我不同意,你还没有尝试设置任何 ChromeOptions。继续投票。
      • 我没有对你投反对票。你花时间帮忙;)
      猜你喜欢
      • 2017-12-30
      • 2013-10-04
      • 2017-10-13
      • 2018-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-03
      • 1970-01-01
      相关资源
      最近更新 更多