多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] 前言 系统弹窗这个是很常见的场景,有时候它不弹出来去操作的话,会抛异常。那么又不知道它啥时候会出来,那么就需要去判断弹窗是否弹出了。 <br /> ## 一、判断alert源码分析 ``` class alert_is_present(object): """ Expect an alert to be present.""" """判断当前页面的alert弹窗""" def __init__(self): pass def __call__(self, driver): try: alert = driver.switch_to.alert alert.text return alert except NoAlertPresentException: return False 1. 这个类比较简单,初始化里面无内容 2. __call__里面就是判断如果正常获取到弹出窗的text内容就返回alert这个对象(注意这里不是返回Ture),没有获取到就返回False ``` ## 二、实例操作 1. 前面的操作步骤优化了下,为了提高脚本的稳定性,确保元素出现后操作,这里结合WebDriverWait里的方法; 2. 实现步骤如下,这里判断的结果返回有两种:没找到就返回False;找到就返回alert对象; 3. 先判断alert是否弹出,如果弹出就点确定按钮accept()。 ![Snipaste_2020-09-10_10-01-38.png](http://i.loli.net/2020/09/10/ugoqLNXiwKbt8Ps.png) <br /> ## 三、参考代码 ``` from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.support.select import Select from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() driver.get("https://www.baidu.com") mouse = WebDriverWait(driver, 10).until(lambda x:x.find_element("id", "s-usersetting-top")) ActionChains(driver).move_to_element(mouse).perform() WebDriverWait(driver, 10).until(lambda x:x.find_element("css selector", ".setpref")).click() # 选择设置项 s = WebDriverWait(driver, 10).until(lambda x:x.find_element("id", "nr_2")) # 点保存设置按钮 js = 'document.getElementsByClassName("prefpanelgo")[0].click();' driver.execute_script(js) # 判断弹框结果 result = EC.alert_is_present()(driver) if result: print(result.text) result.accept() else: print("alert未弹出!!") ```