selenium webdriver——JavaScript警告窗处理

本文介绍如何使用Selenium WebDriver处理由JavaScript生成的警告窗口,包括alert、confirm及prompt等,并提供了具体的代码示例来演示如何使用switch_to_alert()方法进行定位,以及通过text、accept、dismiss和send_keys等方法进行操作。

selenium webdriver——JavaScript警告窗处理

在WebDriver中处理JavaScript所生成的alert、confirm以及prompt,具体方法是使用switch_to_alert()方法定位到alert、confirm以及

prompt,然后使用text/accept/dismiss/send_keys等方法进行操作。

1
2
3
4
5
text:    返回 alert / confirm / prompt中的文字信息
accept():      接受现有警告框 
dismiss():        解散现有警告框
send_keys(KeysToSend):        发送文本至警告框
KeysToSend:           将文本发送至警告框
复制代码
 1 from selenium import webdriver
 2 from selenium.webdriver.common.action_chains import ActionChains
 3 from time import sleep
 4 
 5 
 6 def abcd():
 7     # 打开浏览器
 8     driver = webdriver.Firefox()
 9     driver.implicitly_wait(10)
10     driver.get("http://www.baidu.com")
11     # 鼠标悬停到设置
12     obj = driver.find_element_by_link_text("设置")
13     ActionChains(driver).move_to_element(obj).perform()
14     # 点击搜索设置
15     driver.find_element_by_link_text("搜索设置").click()
16     # 点击保存设置
17     driver.find_element_by_class_name("prefpanelgo").click()
18     sleep(3)
19     # 接受警告框
20     driver.switch_to_alert().accept()
复制代码
driver.switch_to.alert.accept()
### 使用 Selenium 操作浏览器弹窗 #### 1. 识别并处理 JavaScript `Alert` 弹窗 对于标准的 JavaScript `Alert` 弹窗,可以通过调用 `driver.switch_to.alert` 法来访问弹窗对象。此法返回一个 Alert 对象,允许执行诸如接受、忽略或向其发送文本的操作。 ```python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 初始化 WebDriver 实例 (假设使用 Chrome 浏览器) driver = webdriver.Chrome() try: driver.get('http://example.com') # 打开目标网页 alert = WebDriverWait(driver, 10).until(EC.alert_is_present()) # 接受警告框 alert.accept() except Exception as e: print(f"Error occurred while handling the alert: {e}") finally: driver.quit() ``` 上述代码展示了如何通过显式等待确保警报存在后再对其进行操作[^1]。 #### 2. 应对自定义 HTML/CSS/JavaScript 创建的 Div 类型弹窗 当面对由开发者自行设计而非原生 JavaScript API 构建的模态对话框时,则无法依赖于简单的 `switch_to.alert()` 函数;相反,应该像对待常规 DOM 元素那样去寻找这些组件,并采取适当措施关闭它们: ```python # 假设要关闭的是一个带有 'close' class 的按钮 wait = WebDriverWait(driver, 10) close_button = wait.until( EC.element_to_be_clickable((By.CLASS_NAME, "close")) ) close_button.click() ``` 这段脚本说明了怎样利用预期条件(expected conditions)配合元素可见性和可点击性的检查机制,在确认关闭按钮可用之后才尝试交互[^4]。 #### 3. 错误与异常管理 考虑到实际场景中的不确定性因素——比如网络延迟可能导致某些情况下弹窗未能如期显示出来,因此建议总是围绕着可能失败的地包裹一层 try-except 结构以增强程序健壮性: ```python try: # ... 上述任一段落内的逻辑 ... except TimeoutException: print("Timed out waiting for page to load or element to be clickable.") except NoAlertPresentException: print("No alert was present when attempting to interact with it.") except Exception as ex: print(f"Some other error happened during execution: {ex}") ``` 以上片段强调了针对不同种类潜在错误的具体捕捉策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值