在 WebDriver 中处理 JavaScript 所生成的 alert、confirm 以及 prompt 十分简单,具体做法是使用 switch_to.alert 方法定位到 alert/confirm/prompt,然后使用 text/accept/dismiss/send_keys 等方法进行操作。
百度搜索设置弹出的窗口是不能通过前端工具对其进行定位的,这个时候就可以通过 switch_to.alert() 方法接受这个弹窗。通过 switch_to.alert() 方法获取当前页面上的警告框,并使用 accept() 方法接受警告框。
from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains import time driver = webdriver.Chrome() driver.implicitly_wait(10) driver.get('http://www.baidu.com') # 鼠标悬停至“设置”链接 link = driver.find_element_by_link_text('设置') ActionChains(driver).move_to_element(link).perform() # 打开搜索设置 driver.find_element_by_link_text("搜索设置").click() time.sleep(2) # 保存设置 driver.find_element_by_class_name("prefpanelgo").click() time.sleep(2) # 获取警告框文本内容 text = driver.switch_to.alert.text print(text) time.sleep(2) # 接受现有警告框,当然也可以解散警告框(driver.switch_to.alert.dismiss()) driver.switch_to.alert.accept() driver.quit()
注意:对于 driver.switch_to.alert.send_keys() 函数只适应于 prompt 弹出框。
如果是非浏览器弹出窗口,而是网页元素弹出窗口,则不能使用 driver.switch_to.alert
进行弹窗处理,这个时候你就需要按照正常的方式查到该弹出窗口元素,然后进行处理,如下图弹窗。
上图中用红色框框起来的是网页弹窗,该弹窗对应的网页元素是:
<div class="weui-desktop-dialog"> ... ... ... </div>
如果想处理掉该弹窗,可以用 selenium 模拟点击绿框框起来的“知道了” 按钮,该按钮对应的网页元素是:
<button type="button" class="weui-desktop-btn weui-desktop-btn_primary">我知道了</button>
我们只需要编写如下代码即可:
driver.find_element_by_xpath('//button[text()="知道了"]').click()
当然你也可以用 selenium 模拟点击该弹窗右上角的 “X” 按钮。
我弹