(十三)警告框处理

虫师 创建于 12 个月 之前

最后更新时间 2018-11-03


在WebDriver中处理JavaScript所生成的alert、confirm以及prompt十分简单,具体做法是使用 switch_to.alert 方法定位到 alert/confirm/prompt,然后使用text/accept/dismiss/ send_keys等方法进行操作。

  • text:返回 alert/confirm/prompt 中的文字信息。

  • accept():接受现有警告框。

  • dismiss():解散现有警告框。

  • send_keys(keysToSend):发送文本至警告框。keysToSend:将文本发送至警告框。

如下图,百度搜索设置弹出的窗口是不能通过前端工具对其进行定位的,这个时候就可以通过switch_to_alert()方法接受这个弹窗。

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time

driver = webdriver.Firefox()
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()

# 保存设置
driver.find_element_by_class_name("prefpanelgo").click()
time.sleep(2)

# 接受警告框
driver.switch_to.alert.accept()

driver.quit()

通过switch_to_alert()方法获取当前页面上的警告框,并使用accept()方法接受警告框。

我要留言

  • 不是aler这怎么处理: raise exception_class(message, screen, stacktrace) selenium.common.exceptions.NoAlertPresentException: Message: no alert open (Session info: chrome=75.0.3770.80) (Driver info: chromedriver=2.37.544315 (730aa6a5fdba159ac9f4c1e8cbc59bf1b5ce12b7),platform=Windows NT 6.1.7601 SP1 x86_64)

    chase001 创建于 2019-07-19 09:23:35

  • 我的通了,可能会因为百度请求超时报错,百度真垃圾,代码如下: from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains import time driver = webdriver.Chrome() driver.implicitly_wait(10) driver.maximize_window() driver.implicitly_wait(10) driver.get('http://www.baidu.com') driver.implicitly_wait(10) link = driver.find_element_by_link_text('设置')# 定位鼠标要悬停的元素 driver.implicitly_wait(10) ActionChains(driver).move_to_element(link).perform()# 鼠标悬停至“设置”链接 driver.implicitly_wait(10) driver.find_element_by_link_text("搜索设置").click()# 打开搜索设置 time.sleep(6) driver.find_element_by_xpath('//*[@id="gxszButton"]/a[1]').click()# 保存设置 print("点击保存按钮") time.sleep(3) driver.switch_to.alert.accept()# 接受警告框 time.sleep(2) driver.quit()

    哈哈哈学习使我快乐 创建于 2019-07-17 14:17:51

  • driver.find_element_by_link_text("搜索设置").click() time.sleep(2) # Firefox上正常运行的脚本在chrome上提示Element is not clickable at point # 分析原因, # 首先肯定不是因为页面元素不存在而无法点击。也不是要点击的button不在预览范围内。 # 后来发现,是被前一步的操作的一个弹出层挡住了。因为前几步是弹出了一个modal, # 在关闭modal的时候webdriver就立刻执行下一步点击某个link,而modal可能还没完全关闭掉。 # 解决办法是等待那个弹出层完全关闭掉,link可以点击的时候再执行 #在两步之间加了个简单的time.sleep(2)命令解决了

    保存设置

    driver.find_element_by_link_text('保存设置').click()

    jayunq 创建于 2019-06-07 00:45:50

  • Message: unknown error: Element ... is not clickable at point (579, 202). Other element would receive the click: ...

    richjack888 创建于 2018-12-29 20:59:18

  • 保存设置那栏会报错

    richjack888 创建于 2018-12-29 20:59:12