使用 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
我的成就是什么?
没什么,程序一直在崩溃:
问题:
如何设置整个内容,以禁用每个警报。
如果不可能,我怎么可以接受它们或者至少这样做以使程序继续流动?
答案 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();
}