selenium弹窗处理,包括Javascript弹窗、HTML弹出层和Windows弹窗
弹窗处理
Javascript弹窗
Javascript中有3种弹窗:alert(只有一个确认按钮)、confirmation(有确认和取消两个按钮供选择)、prompt(需要输入内容)。
无法使用selenium提供的find_element_by_xx()定位到alert中的元素。
Selenium提供一组统一的API处理它们,代码形式上都当做Alert的实例来处理。
alert = driver.switch_to_alert()切换到当前弹出的alert。关闭了alert之后,回到alert弹出之前的frame。
alert.accept():单击确认按钮。alert消失后,可以直接操作原来的driver。
alert.authenticate(username, password):在HTTP标准的BASIC或者DIGEST认证框中输入用户名密码,并且点击确认。并不适用于基于表单的认证。
alert.dismiss():点击取消按钮。
alert.send_keys(keysToSend):向alert的文本输入框中输入内容。
alert.text:获取alert的文本内容。
HTML弹出层
网页上弹出的信息也可能是html弹出层内容。Html弹出层能实现比javascript弹窗更丰富的效果。
Javascript将弹出层html设置为可见时,就出现了弹窗。
html弹出层的元素可以直接通过selenium定位和操作。但是要注意弹出层的窗口没有打开时,弹出层的元素是不可见的,所以虽然可以定位到,但是不能进行操作。
Windows弹窗
操作网页时可以会出现Windows窗口,比如ctrl+s会弹出Windows窗口、右键另存为下载、选择要上传的文件等。但是selenium操作不了Windows窗口。可以使用autoit3来处理Windows窗口。
使用举例:
#导入python win32处理包
import win32com.client
#ctrl+s保存网页
ActionChains(driver).key_down(Keys.CONTROL).send_keys("s").key_up(Keys.CONTROL).perform();
#启动autoitx进程
autoit = win32com.client.Dispatch("AutoItX3.Control")
autoit.WinWaitActive("另存为")
file_name="page"
autoit.Send(file_name)
#按钮“保存”的id是1
autoit.ControlClick("另存为","","1")
有Windows弹窗时,无法手工操作web页面,但是selenium可以继续正常操作web页面,还可以正常关闭浏览器。
上传、下载文件
要上传文件时,可以找到填写文件路径的input元素,通过send_keys()输入文件路径。
避免点击“浏览”,因为会出现windows窗口,但是selenium不支持操作Windows控件。如果要操作windows窗口,要借助autoit。
下载文件时如果弹出windows窗口,可以使用autoit操作,实现下载。更好的办法是对浏览器进行设置,使得点击下载时不弹出提示框。这样,selenium点击下载按钮时,就会立刻进行下载。
本文地址:https://blog.csdn.net/jxzdsw/article/details/107365658
上一篇: 前端常用辅助函数工具