Python和Selenium - 禁用所有警报

时间:2017-07-26 07:03:53

标签: python selenium

使用 Python 3 Selenium >的 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

我的成就是什么?

没什么,程序一直在崩溃:

enter image description here

问题

如何设置整个内容,以禁用每个警报。

如果不可能,我怎么可以接受它们或者至少这样做以使程序继续流动?

3 个答案:

答案 0 :(得分:0)

最好的解决方案是通过设置create or replace PROCEDURE STORED_PROCEDURE_COMBINED is STORED_PROCEDURE_1(); STORED_PROCEDURE_2(); END STORED_PROCEDURE_COMBINED; 来修改window对象。 然后只需致电windows.alert = null 但是,如果在页面加载时弹出警报,则此方法将无效。也不适用于driver.execute_script(...)

处理此问题的最佳方法是创建一个Google扩展,并确保在async execution文件中启用web_accessible_resources,这是一种授权扩展来修改window对象的方法。

答案 1 :(得分:0)

这将完成工作,并在警报后添加

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

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

答案 2 :(得分:-6)

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

这可以帮助您,它来自下面提到的网站

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