zoukankan      html  css  js  c++  java
  • python + selenium 模拟键盘升级版PyUserInput


    前言
    在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

    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

    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!")
    python3.6安装PyUserInput

    前言

    python2上安装SendKeys库,对于不好定位的元素,用快捷键操作是极好的,那么在3.6上安装时,会报错

    python3.6安装SendKeys报错

    1.python3.6安装SendKeys是无法安装的,会报错

    pip install SendKeys

    32位的python3.6安装PyUserInput

    1.python3.6分2个版本,1个是32位的python3.6;另外一个是64位的python3.6.

    • 如果你的电脑是32位的,装python3.6 32位版本,直接用pip安装是没问题的

    • 如果你的电脑是64位的,装python3.6 32位版本,也是没问题的

    pip install PyUserInput

    64位的python3.6安装PyUserInput

    1.如果你的电脑是64位的,装python3.6 64位版本,那么问题就来了

    2.报错:No matching distribution found for pyHook (from PyUserInput)

    pyHook安装

    1.pyHook下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml

    2.下载到本地后,用pip安装

    pip install pyHook的本地路径

    3.安装完pyHook后,继续安装PyUserInput时候,会报错:No matching distribution found for pywin32 (from PyUserInput)

    pywin32

    1.pywin32下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml

    2.下载到本地后,安装

    pip install pywin32的本地路径

    导入PyMouse报错

    1.环境安装完了,你以为没事了,那就是too young了,接下来导入模块后直接运行,报错:ImportError: DLL load failed: 找不到指定的模块。

    2.问题原因:pywin32-221版本太高了,换成pywin32-220

    pywin32-220下载地址:https://sourceforge.net/projects/pywin32/files/pywin32/Build%20220/

    3.先卸载pywin32: pip uninstall pywin32

    4.再重新安装pywin32-220版本,接下来再运行就OK了

     
  • 相关阅读:
    async
    subing用法
    vue中子组件调用父组件的方法
    Python—创建目录
    Python—访问限制
    Python—实例方法,实例数据(类属性,实例属性)
    Python—对象,类
    tail命令
    head命令
    pwd命令
  • 原文地址:https://www.cnblogs.com/wyj497022944/p/9626816.html
Copyright © 2011-2022 走看看