龙空技术网

python使用selenium自动点击识别alert窗口报错

新一代搬砖人 103

前言:

当前各位老铁们对“html页面弹出框”大约比较关心,小伙伴们都想要剖析一些“html页面弹出框”的相关资讯。那么小编也在网摘上搜集了一些有关“html页面弹出框””的相关知识,希望姐妹们能喜欢,咱们一起来学习一下吧!

背景

最近python比较火,想自学下,写了一个简单的打开网页点击网页

问题

首先打开一个网页

driver = webdriver.Chrome('D:\chromedriver.exe')driver.maximize_window()driver.get(";)

然后点击链接,打开另外一个网页

driver.find_element_by_xpath('/html/body/a').click()

这个网页就会过一段时间弹出一个alert窗口

识别这个弹窗,然后点击确定

  wait = WebDriverWait(driver, 2)  # wait.until(EC.alert_is_present())  # a1 = Alert(driver)  a1 = driver.switch_to.alert  time.sleep(2)  a1.accept()

问题来了,尝试了很多次,都识别不了,一直报错

解决

先梳理下是否是代码问题,百度了很多,都是这样处理的,就算是判断alert窗口是否存在也是通过是否有异常来判断;然后试试只有一个窗口,直接打开test.html;发现并没有报错,而且成功了;alert识别了,确定按钮也点击了

说明是因为在点击链接的时候,跳转了新的窗口,而程序还是定位在index.html页面的窗口,导致无法识别alert弹出窗口;就只要在点击到新窗口后就定位到新窗口问题不就解决了么;开干,在点击后加入定位到新窗口的代码:

handle_all = driver.window_handles  # 只有2个窗口时for h in handle_all:    if h != handle_main:        handle_new = hdriver.switch_to.window(handle_new)

然后重新运行程序,问题解决!

附整体代码:

driver = webdriver.Chrome('D:\chromedriver.exe')driver.maximize_window()driver.get(";)handle_main = driver.current_window_handledriver.find_element_by_xpath('/html/body/a').click()handle_all = driver.window_handles  # 只有2个窗口时for h in handle_all:    if h != handle_main:        handle_new = hdriver.switch_to.window(handle_new)while True:    try :        wait = WebDriverWait(driver, 2)        # wait.until(EC.alert_is_present())        # a1 = Alert(driver)        a1 = driver.switch_to.alert        time.sleep(2)        a1.accept()        time.sleep(2)        driver.find_element_by_xpath('//*[@id="alert"]').click()        a1 = driver.switch_to.alert        time.sleep(2)    except Exception as ex:                print(ex)                time.sleep(5)

标签: #html页面弹出框