selenium+python自动化99--文件下载弹窗处理(PyKeyboard)
前言
在web自动化下载操作时,有时候会弹出下载框,这种下载框不属于web的页面,是没办法去定位的(有些同学一说到点击,脑袋里面就是定位!定位!定位!)
有时候我们并不是非要去定位到这个按钮再去点击,学会使用键盘的快捷键操作,也能达到一样的效果。
之前讲过一篇Selenium2+python自动化75-非input文件上传(SendKeys)这个当时是基于python2写的。
最近很多小伙伴开始用python3了,这个SendKeys在python3上没法用,python3需要用PyUserInput,详细安装教程地址Selenium+python自动化84-python3.6用PyUserInput
安装依赖包:
- 依赖pywin32
- 依赖pyHook
PyKeyboard键盘操作
PyUserInput模块里面主要有两个类:
- PyMouse, 专门模拟鼠标操作
- PyKeyboard,专门模拟键盘上的操作
先用手工在键盘上操作下,记住操作步骤:按Tab键—按Enter键
代码参考
# coding:utf-8 from selenium import webdriver from pykeyboard import PyKeyboard from pymouse import PyMouse import time driver = webdriver.Firefox() driver.get("https://www.autoitscript.com/files/autoit3/autoit-v3-setup.exe") time.sleep(3) # 默认在取消按钮上,先切换到保存文件上 k = PyKeyboard() # 发送tab k.press_key(k.tab_key) k.release_key(k.tab_key) time.sleep(3) # 发送回车
这里用到两个方法,一个是press_key按住Tab键,另外一个是release_key释放按键。其实还有个方法tap_key
tap_key模拟点击
先看下tap_key源码是怎么设计的,实际上tap_key就是封装的press_key和release_key这2个方法
- character 传对应的键盘事件
- n=1 默认只点一次
- interval=0 如果有多次点击操作,中间的间隙时间,默认sleep时间为0
def tap_key(self, character='', n=1, interval=0): """Press and release a given character key n times.""" for i in range(n): self.press_key(character) self.release_key(character) time.sleep(interval)
改成tap_key操作
# coding:utf-8 from selenium import webdriver from pykeyboard import PyKeyboard from pymouse import PyMouse import time # **作者:上海-悠悠, QQ交流群:646645429** driver = webdriver.Firefox() driver.get("https://www.autoitscript.com/files/autoit3/autoit-v3-setup.exe") time.sleep(3) # 默认在取消按钮上,先切换到保存文件上 k = PyKeyboard() # 模拟Tab k.tap_key(k.tab_key) time.sleep(3) # 发送Enter回车 k.tap_key(k.enter_key)
PyKeyboard其它操作
除了能模拟tab,enter这种操作,也能模拟在输入框输入内容.
基本操作方法,如输入h:k.tap_key(“h”)
# coding:utf-8 from selenium import webdriver from pykeyboard import PyKeyboard from pymouse import PyMouse import time # **作者:上海-悠悠, QQ交流群:646645429** driver = webdriver.Firefox() driver.get("https://www.baidu.com/") time.sleep(3) k = PyKeyboard() def input_str(s): '''输入一串英文''' for i in s: k.tap_key(i) k.tab_key(k.enter_key) input_str("helloworld!")
作者:上海-悠悠, QQ交流群:646645429