背景
在进行selenium进行网页自动化的时候,当涉及到密码控件的时候,就会发现密码控件无法通过F12定位到,也就是无法通过selenium定位元素。
解决思路
由于涉及到控件,无法通过网页定位,那么只能曲线救国了。
在我们人工处理的这种登陆页面的时候,可以通过键盘输入tab
键来切换到密码框。
所以规避办法是,直接无视selenium,我们通过直接控制键盘,模拟输入
输入tab
键来切换当前元素到密码框
再输入密码
最后回到selenium点击提交按钮。
那么怎么直接模拟键盘输入呢?
在python中,第三方库:PyUserInput提供了鼠标和键盘输入功能。
实现办法
根据上述思路,实现步骤如下
- 安装PyUserInput库
- 初始化键盘对象
- selenium定位到用户名元素,输入用户名
- 模拟键盘输入tab,使定位到密码控件
- 模拟键盘输入密码
- selenium定位到提交按钮,点击提交
实现代码:
1 | from selenium import webdriver |
注意:
上述代码里,每使用PyKeyboard()
输入一次,都暂停1秒,那是因为测试发现直接输入的话,可能会存在异常,或输入失败的情况。
虽然PyUserInput
提供了PyKeyboard.type_string()
的方法用于直接输入字符串,但在控件的场景下会输入失败。估计是因为控件还需要处理加密的关系吧。
扩展
PyUserInput
库的详细介绍可参考:https://pypi.org/project/PyUserInput/
在安装时,MAC OS直接通过pip
安装即可:
1 | pip install PyUserInput |
但Windows系统直接pip
安装会有报错提示:
1 | Could not find a version that satisfies the requirement pyHook (from PyUserInput) (from versions: ) |
根据提示,需要先安装pyHook
,但是使用pip
安装就会提示找不到对应的包:
1 | Could not find a version that satisfies the requirement pyHook (from versions: ) |
需要手动在官网:https://sourceforge.net/projects/pyhook/ 中下载
不过建议直接在如下网站下载编译好的whl
文件:
https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyhook
安装whl
文件命令为:
1 | pip install xxx.whl |
先安装好pyHook
在安装PyUserInput
即可。