前言

在web自动化下载操作时,有时候会弹出下载框,这种下载框不属于web的页面,是没办法去定位的(有些同学一说到点击,脑袋里面就是定位!定位!定位!)

有时候我们并不是非要去定位到这个按钮再去点击,学会使用键盘的快捷键操作,也能达到一样的效果。

之前讲过一篇Selenium2+python自动化75-非input文件上传(SendKeys)这个当时是基于python2写的。

最近很多小伙伴开始用python3了,这个SendKeys在python3上没法用,python3需要用PyUserInput,详细安装教程地址【selenium+python自动化85-python3.6上SendKeys报错用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

selenium+python自动化98--文件下载弹窗处理(PyKeyboard)的更多相关文章

  1. selenium+python自动化79-文件下载(SendKeys)

    前言 文件下载时候会弹出一个下载选项框,这个弹框是定位不到的,有些元素注定定位不到也没关系,就当没有鼠标,我们可以通过键盘的快捷键完成操作. SendKeys库是专业的处理键盘事件的,所以这里需要用S ...

  2. selenium+python自动化登录脚本

    利用selenium+python写的一个关于登录的自动化脚本

  3. 【python-excel】Selenium+python自动化之读取Excel数据(xlrd)

    Selenium2+python自动化之读取Excel数据(xlrd) 转载地址:http://www.cnblogs.com/lingzeng86/p/6793398.html ·········· ...

  4. selenium+python自动化102-登录页面滑动解锁(ActionChains)

    前言 登录页面会遇到滑动解锁,滑动解锁的目的就是为了防止别人用代码登录(也就是为了防止你自动化登录),有些滑动解锁是需要去拼图这种会难一点. 有些直接拖到最最右侧就可以了,本篇讲下使用 seleniu ...

  5. selenium+python自动化100-centos上搭建selenium启动chrome浏览器headless无界面模式

    环境准备 前言 selenium在windows机器上运行,每次会启动界面,运行很不稳定.于是想到用chrome来了的headless无界面模式,确实方便了不少. 为了提高自动化运行的效率和稳定性,于 ...

  6. selenium+python自动化之元素定位

    自动化按步骤拆分的话,可以分为四步操作:定位元素,操作元素,获取返回结果,断言(返回结果与期望结果是否一致),最后自动出测试报告.本篇接下来讲基本的八种元素定位方法.说的通俗一点,就是教大家找对象. ...

  7. selenium+python自动化之操作浏览器

    一.打开网站 1.第一步:从selenium里面导入webdriver模块 2.打开Firefox浏览器(Ie和Chrome对应下面的) 3.打开百度网址 二.设置休眠 1.由于打开百度网址后,页面加 ...

  8. selenium+python自动化之环境安装

    一.Python安装 1.操作系统:win7 64位系统 2.下载Python安装包,选择2.7版本和3.6版本都可以(最好安装2.7版本稳定)官网下载地址:https://www.python.or ...

  9. selenium python自动化简明演示

    1.selenium安装: pip install -U selenium参考:https://pypi.python.org/pypi/selenium#downloads2.下载firefox驱动 ...

随机推荐

  1. Arch Linux 安装博通 BCM4360 驱动(Arch Linux, Ubuntu, Debian, Fedora...)

    BCM4360 在2010年9月,博通完全开源的硬件驱动[1].该驱动程序 brcm80211已被列入到自2.6.37之后的内核中.随着2.6.39发布,这些驱动程序已被重新命名为 brcmsmac和 ...

  2. Objective-C之NSArray(数组)默认排序与自定义排序

    在讲OC中数组的排序之前我先上一段代码,它是简单数组排序的一种方法(也就是元素是字符串或者数据的数组,因为后面要讲元素为类的数组排序) 代码1: NSArray *sortArr4 = [sortAr ...

  3. AChartEngine使用View显示图表

    学习过AChartEngine的人肯定都知道,使用ChartFactory创建一张图表可以使用Intent方法,之后调用StartActivity来启用这个Intent,但是这么左右一个坏处,就是当你 ...

  4. Grouping Sets:CUBE和ROLLUP从句

    在上一篇文章里我讨论了SQL Server里Grouping Sets的功能.从文中的例子可以看到,通过简单定义需要的分组集是很容易进行各自分组.但如果像从所给的列集里想要有所有可能的分布——即所谓的 ...

  5. gcc的-D和-U参数:宏的设置与取消 _CCFLAGS=" -w -enable-threads=posix -DLINUX -D_REENTRANT -DWORKONGN -Dlinux -D_GN_DETAIL_SDR_"

    _CCFLAGS=" -w -enable-threads=posix -DLINUX -D_REENTRANT -DWORKONGN -Dlinux -D_GN_DETAIL_SDR_&q ...

  6. 把centos 网卡接口eth2改成eth0

    kvm 虚拟机 复制之后 默认网卡是 eth2了 用 ifconfig -a 命令查看所有的网络设置,果然没有eth0的相关设置,多出来一个eth2.显示如下:[root@neal ~]# ifcon ...

  7. Spark SQL 1.3测试

    Spark SQL 1.3 参考官方文档:Spark SQL and DataFrame Guide 概览介绍参考:平易近人.兼容并蓄——Spark SQL 1.3.0概览 DataFrame提供了一 ...

  8. vue的组件化运用(数据在两个组件互传,小问题总结)

    一.vue的组件化应用 首先,知道有哪些相关的属性需要用到,再慢慢去理解,运用. 1.两个vue页面 2. slot占位符(可用可不用) 3.props内置属性 4.watch监听函数 5.impor ...

  9. mysqlQL 5.7 安装报错CMake Error at cmake/boost.cmake:81 (MESSAGE)

    CMake Error at cmake/boost.cmake:81 (MESSAGE): You can download it with -DDOWNLOAD_BOOST=1 -DWITH_BO ...

  10. 【开讲啦】20181029 oracle教学笔记

    --创建表空间 create tablespace waterboss--表空间名称 datafile 'd:\waterboss.dbf'--用于设置物理文件名称 size 100m--用于设置表空 ...