• python+pywinauto—PC端自动化(二)等待机制、键盘及鼠标操作


    目录

    等待

    等待机制

    timings模块

    键盘操作

    键盘输入send_keys()

    send_keys()中特殊字符的键代码

    键盘修饰符

    鼠标操作


    等待

    等待机制

    1、wait方法:作用是等待窗口处于某种状态
    '''
    参数:
    wait_for:等待的状态(状态有以下几种)
        ---exists:表示该窗口是有效的句柄
        ---visible:表示该窗口未隐藏
        ---enabled:表示未禁用窗口
        ---ready:表示该窗口可见并启用
        ---active:表示该窗口处于活动状态
    timeout:超时时间
    retry_interval:重试时间间隔
    '''

    1. from pywinauto import application, findbestmatch, findwindows, keyboard, mouse, timings
    2. import os
    3. os.environ.update({"__COMPAT_LAYER": "RUnAsInvoker"})
    4. app = application.Application(backend='uia').start('notepad.exe')
    5. win = app['无标题 - 记事本']
    6. # file = win['应用程序'].child_window(title="文件(F)", control_type="MenuItem")
    7. # print(win.print_control_identifiers()) # 打印结构树,可以打印到文件中,见中文文档
    8. win.wait(wait_for='visible',timeout=1,retry_interval=1)

    2、wait_not()方法:作用是等待窗口不处于某种状态,参数同wait()

    win.wait_not(wait_for_not='visible', timeout=10, retry_interval=1)

    3、wait_cpu_usage_lower(),等待该进程的cup的使用率低于某个阀值。注意:此方法仅适用于整个应用程序进程,不适用于窗口/元素。
    '''
    参数:
        ---threshold:该进程cup占用率
        ---timeout :超时时间
        ---retry_interval:重试时间问隔
    '''

    app.wait_cpu_usage_lower(threshold=0.01, timeout=3, usage_interval=1)

    4、wait_for_process_exit,等待进程退出,否则引出TimeoutError异常
     

    wait_for_process_exit(self, timeout=None, retry_interval=None)

    timings模块

    1. timings.wait_until()
    2. timings.wait_until_passes()
    3. '''
    4. 参数:timeout超时时间
    5. retry_interval 重试时间
    6. func 执行的函数
    7. value 比较的值
    8. op 比较方式函数(默认为相等)
    9. args 给执行函数传位置参数
    10. kwargs 给执行函数传关键字参数
    11. '''

    通过在对象timings.Tfimings中设置全局静态变量(等待时间),它可以单独根据需要进行调整
    全局计时变量值的设置方法

    1. timings.Timings.defaults() # 将全局计时设置为默认值
    2. timings.Timings.slow() # 将所有时间加倍(使代码执行速度降低两倍)
    3. timings.Timings.fast() # 将所有时间减少一倍(使代码执行速度增加到两倍)

    键盘操作

    键盘输入send_keys()

    1. from pywinauto import application, findbestmatch, findwindows, keyboard, mouse, timings
    2. import os
    3. os.environ.update({"__COMPAT_LAYER": "RUnAsInvoker"})
    4. app = application.Application(backend='uia').start('notepad.exe')
    5. win = app['无标题 - 记事本']
    6. text = '''
    7. 红笺小字。说尽平生意。鸿雁在云鱼在水。惆怅此情难寄。
    8. 斜阳独倚西楼。遥山恰对帘钩。人面不知何处,绿波依旧东流。
    9. '''
    10. edit = win['Edit'].type_keys(text) # type_keys()输入文本内容
    11. # 常用按键,不加花括号时,默认为文本形式进行输入
    12. keyboard.send_keys('{VK_F5}') # F5,另一种写法keyboard.send_keys('{F5}')

    send_keys()中特殊字符的键代码

    1. BACKSPACE {BACKSPACE}、{BS} 或 {BKSP}
    2. BREAK {BREAK}
    3. CAPS LOCK {CAPSLOCK}
    4. DEL 或 DELETE {DELETE} 或 {DEL}
    5. DOWN ARROW(下箭头) {DOWN}
    6. END {END}
    7. ENTER {ENTER} 或 ~
    8. ESC {ESC}
    9. HELP {HELP}
    10. HOME {HOME}
    11. INS 或 INSERT {INSERT} 或 {INS}
    12. LEFT ARROW(左箭头) {LEFT}
    13. NUM LOCK {NUMLOCK}
    14. PAGE DOWN {PGDN}
    15. PAGE UP {PGUP}
    16. PRINT SCREEN {PRTSC}(保留,以备将来使用)
    17. RIGHT ARROW(右箭头) {RIGHT}
    18. SCROLL LOCK {SCROLLLOCK}
    19. TAB {TAB}
    20. UP ARROW(上箭头) {UP}
    21. F1 {F1}
    22. F2 {F2}
    23. F3 {F3}
    24. F4 {F4}
    25. F5 {F5}
    26. F6 {F6}
    27. F7 {F7}
    28. F8 {F8}
    29. F9 {F9}
    30. F10 {F10}
    31. F11 {F11}
    32. F12 {F12}
    33. F13 {F13}
    34. F14 {F14}
    35. F15 {F15}
    36. F16 {F16}
    37. 数字盘加号 {ADD}
    38. 数字盘减号 {SUBTRACT}
    39. 数字盘乘号 {MULTIPLY}
    40. 数字盘除号 {DIVIDE}

    键盘修饰符

    1. win = app['无标题 - 记事本']
    2. text = '''
    3. 红笺小字。说尽平生意。鸿雁在云鱼在水。惆怅此情难寄。
    4. 斜阳独倚西楼。遥山恰对帘钩。人面不知何处,绿波依旧东流。
    5. '''
    6. edit = win['Edit'].type_keys(text)
    7. keyboard.send_keys('^a')
    8. keyboard.send_keys('^c')
    9. keyboard.send_keys('^v')
    10. keyboard.send_keys("{VK_RETURN}")
    11. keyboard.send_keys('^v')
    • '+': {VK_SHIFT}
    • '^': {VK_CONTROL}
    • '%': {VK_MENU}

    鼠标操作

    参数:button指定左击还是右击,coords指定鼠标点击的位置(x,y)

    单击

    1. from pywinauto import mouse
    2. mouse.click(button='left', coords=(100, 100))  # 左击,默认为左击,可以不写button参数
    3. mouse.click(button='right', coords=(100, 100))  # 右击
    4. mouse.right_click(coords=(100, 135))  # 右击

    双击

    mouse.double_click(button='left', coords=(100, 135))

    按下和释放鼠标

    1. # 按下鼠标:press
    2. mouse.press(button='left', coords=(1000, 20)) # 将鼠标移动到(1000,20)处坐标处按下
    3. # 释放鼠标:repleace
    4. mouse.release(button='left', coords=(1500, 200)) # 将鼠标移动到(200,200)处释放

    移动鼠标位置

    mouse.move(coords=(800, 500))

    鼠标中键单击

    mouse.wheel_click(coords=(400, 400))

    鼠标滚轮操作

    wheel_dist指定鼠标滚轮滑动的次数,正数往上,负数往下

    1. for i in range(10):
    2.     mouse.scroll(coords=(1200, 300), wheel_dist=-3)

    中文官方:Pywinauto 中文文档 · 看云 (kancloud.cn) 

    参考:Windows GUI程序自动化之pywinauto (wjhsh.net)

  • 相关阅读:
    【Unity】Inspector排版扩展学习初探
    十一月组队学习报名啦!
    【华为OD机试真题 python】热点网站统计 【2022 Q4 | 200分】
    【可视化工具】二维矩形装箱可视化 + JS-Canvas实现
    【python入门篇】元组、字典和集合(3)
    OBS使用
    使用nvm管理nodejs(把高版本降级为低版本)
    java面试题
    Mysql: 创建表 和 管理表
    Sndroid开发设置Settings
  • 原文地址:https://blog.csdn.net/JBY2020/article/details/126297101