元素操作(二)
1|0一. windows弹出框的处理
1|11. 真实案例
有时候,我们会在页面中遇到windows弹出框,和页面弹出框不同,windows弹出框不能用F12查看html源码来定位元素,对于这种弹出框应该作何处理呢?
例如:博客园中点击退出按钮,会弹出一个确认是否退出的弹出框,此时按F12是没有作用的
1|22. 解决办法
1) 确认浏览器弹出框存在
2) 使用switch_to方法切换到windows弹出框,driver.switch_to.alert
3) Alert类提供了一系列的操作方法。利用Alert的方法,选择接受(accept)或者拒绝(dismiss)
-
accept():是
-
dismiss():否
-
text():获取弹出框的内容
总结:
一. 用显性等待,等待alert弹出框出现 alert_is_present()
二. 切换alert switch_to.alert
三. 操作它,选择接受或者拒绝,还可以获取弹出框文本内容
1|33. 实例
假设python脚本的同级目录下存在一个test_alert.html的文件,代码和效果如下:
点击登录按钮,会弹出一个windows弹出框
现在虽然无法通过F12定位这个弹出框,但可以通过switch_to.alert切换到这个弹出框,再利用Alert类提供的方法,来点击确定按钮
python脚本的运行结果也打印了弹出框的文本内容
2|0二. 鼠标操作
由selenium的ActionChains来完成模拟鼠标操作
2|1引入ActionChains类
2|2主要操作流程:
1. 实例化鼠标类
2. 存储鼠标操作(用列表的形式按先后顺序来存储)
3. perform()来执行鼠标操作
2|3支持的操作如下:
double_click 双击操作
context_click 右键操作
drag_and_drop 拖拽操作。左键按住拖动某一个元素到另外一个区域,然后释放按键
move_to_element()--鼠标悬停。以后会经常遇到
2|4实例:
比如想让鼠标悬停在百度首页的菜单栏的设置上
代码如下:
3|0三. 下拉列表操作
观察下拉框页面元素,是select/option还是ul/li
1. 菜单栏—点击其中的某个链接跳转
2. 在下拉列表中选择一个值
3|1思路:
1. 等待下拉列表和下拉列表中值存在
2. 对下拉列表中的元素进行操作
3|2两种方式:
一. 获取所有的下拉列表值,然后用循环取匹配相同的值
二. 通过text的内容来找到下拉列表的某个值
比如现在要去百度首页的设置里,点开设置是个下拉列表,在这个列表中选择高级搜索并点击
注意:高级搜索定位时,需要先点击设置,在高级搜索出现后,再按ctrl + shift + C快捷键来获取高级搜索的定位
3|3方法一:根据文本内容来获取对应的元素
3|4方法二:获取整个下拉列表中的所有元素,然后再去选择一个
3|5Select类—下拉框操作
selenium提供了Select类来处理select/option
引入类:
选择下拉列表值:
1. 通过下标选择:select_by_index(index) 从0开始
2. 通过value属性:select_by_value(value值)
3. 通过文本内容:select_by_visible_text(文本内容)
3|6实例:打开百度首页——设置——高级搜索,并在文档格式里选择其中三项
4|0四. 窗口切换
在页面中点击某个链接之后,就会打开一个新的窗口
如何切换到新窗口?
若新窗口操作之后,需要切换回原来的窗口?
4|11. 获取当前所有的窗口
4|22. 切换到指定的窗口
注意:switch_to.window()和switch_to_window()都可以,但后者将淘汰,建议用前者
4|33. 切回原来的窗口
4|44. 获取当前窗口的句柄
4|5实例
5|0五. 上传操作
5|1有两种情况:
1. 如果是input,可以直接输入路径的,那么直接调send_keys输入路径
2. 非input标签的上传,则需要借助第三方工具
2.1 AutoIt 我们去调用其生成的au3或exe文件(需要了解)
2.2 SendKeys第三方库(目前只支持到2.7版本) 网址:https://pypi.org/project/SendKeys
2.3 Python pywin32库,识别对话框句柄,进而操作
5|2工具:
pywin32和spy++
5|3下载安装:
pywin32
下载地址:https://sourceforge.net/projects/pywin32
安装方法:https://jingyan.baidu.com/article/bad08e1ed173d409c85121f8.html
WinSpy
下载地址:https://sourceforge.net/projects/winspyex
安装方法:下载为压缩包,解压后即可
例:百度网盘—上传窗口,利用winSpy可以看到从顶层到文件路径输入区域总共有4层
5|4上传操作代码:
5|5详细说明:
win32gui.FindWindow(IpClassName, IpWindowName)
自顶层窗口开始寻找匹配条件的窗口,并返回这个窗口的句柄
IpClassName:类名,在Spy++里能够看到
IpWindowName:窗口名,标题栏上能看到的名字
win32gui.FindWindowEx(hwndParent=0, hwndChildAfter=0, IpszClass=None, IpszWindow=None)
搜索类名和窗体名匹配的窗体,并返回这个窗体的句柄。找不到就返回0
hwndParent:若不为0,则搜索句柄为hwndParent窗体的子窗体
hwndChildAfter:若不为0,则按照z-index的顺序从hwndChildAfter向后开始搜索子窗体,否则从第一个子窗体开始搜索
IpClassName:字符型,是窗体的类名,这个可以在Spy++里找到
IpWindowName:字符型,是窗口名,也就是标题栏你能看到的那个标题
win32gui.SendMessage(hWnd, Msg, wParam, IParam)
hWnd:整型,接收消息的窗体句柄
Msg:整型,要发送的消息,这些消息都是windows预先定义好的
wParam:整型,消息的wParam参数
IParam:整型,消息的Param参数
5|6WinSpy图解:
一级窗口
一级窗口下的子窗口,可以看到有打开按钮,还有ComboBoxEx32
二级窗口ComboBoxEx32
二级窗口打开(&0)
三级窗口ComboBox
四级窗口Edit,它是没有Text的
5|7代码运行后,上传成功:
注意:需要上传的文件不能为空文件,否则会上传失败
__EOF__

本文链接:https://www.cnblogs.com/my_captain/p/9235781.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?