《老鸟python 系列》视频上线了,全网稀缺资源,涵盖python人工智能教程,爬虫教程,web教程,数据分析教程以及界面库和服务器教程,以及各个方向的主流实用项目,手把手带你从零开始进阶高手之路!点击 链接 查看详情

弹窗处理

阅读:124996668    分享到

在 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() 方法接受这个弹窗。通过 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” 按钮。


如果以上内容对您有帮助,请老板用微信扫一下赞赏码,赞赏后加微信号 birdpython 领取免费视频。


登录后评论

user_image
hacker9090
2020年1月18日 22:11 回复

我弹


user_image
张佳玮
2018年3月27日 04:40 回复

博主写作水平不错啊