首页 > 其他分享 >pywinauto使用指南

pywinauto使用指南

时间:2023-06-17 18:13:50浏览次数:55  
标签:控件 keys pywinauto app send print 使用指南

@

目录

安装

pip install pywinauto

使用须知

pywinauto官方文档

确定app的可访问技术

1、win32 API(backend=“win32”)
一般是MFC、VB6、VCL,简单的WinForms控件和大多数旧的应用程序
2、MS UI Automoation API(backend=“uia”)
一般是WinForms、WPF、Store app,Qt5,浏览器

启动应用程序

1、Applicant
作用范围:单个进程
2、desktop
作用范围:跨进程

辅助工具

spy++ / inspect.exe

详细使用

开启app

启动notepad

from pywinauto.application import Application
app = Application(backend='uia').start("notepad.exe")

启动qq

from pywinauto.application import Application
app = Application(backend='uia').start(r"D:\\Program Files\\Tencent\\QQ\\Bin\\QQScLauncher.exe")

或者

import pywinauto
app = pywinauto.Application(backend='uia').start(r"D:\\Program Files\\Tencent\\QQ\\Bin\\QQScLauncher.exe")

连接已经打开的应用程序

1、通过进程号连接
任务管理器 查看

PID即为进程号 :5460

app = Application(backend='uia').connect(process="XXX")

2、通过窗口句柄连接

app = Application(backend='uia').connect(handle="XXX")

或者通过inspect查看

ProcessID and NativeWindowHandle

选择程序窗口

1、根据窗口标题/类名选择
推荐使用

window = app["QQ"] # window = app["TXGuiFoundation"] 
window.print_control_identifiers()

2、根据窗口类名选择

window = app.TXGuiFoundation
window.print_control_identifiers()

获取当前窗口的坐标

print(app["QQ"].rectangle())

窗口控件分类

类别 名称
状态栏 StatusBar
按钮 Button
单选框 RadioButton
组合框 ComboBox
复选框 CheckBox
组框 GroupBox
编辑栏 Edit
列表框 ListBox
弹出菜单 PopupMenu
工具栏 Toolbar
树状视图 Tree View
菜单栏 MenuItem
菜单 Menu
窗格 Pane
静态内容 Static
对话框(窗口) Dialog
头部内容 Header
列表显示控件 ListView
选项卡控件 TabControl
工具提示 ToolTips

窗口控件基本属性获取方法

1、获取控件类型:wrapper_object()
2、获取控件支持的方法:print(dir(a.wrapper_object()))
3、获取控件的子元素:children()
4、获取控件类名:class_name()
5、以字典的形式返回控件的属性:get_properties()
【以上全部可以用inspect直接查看获取】

获取控件的文本内容

file.texts()

对窗口/控件的截图处理

方法:capture_as_image()`

pic = app[title_notepad].capture_as_image()
print(pic)
pic.save('01.png')

菜单的相关操作

菜单控件

1、通过下标选择菜单项

menu = window['menu']
print(menu.items())#获取菜单的子菜单项
m = menu.item_by_index(1)
print(m)

2、通过路径选择菜单项

menu = window['menu']
print(menu.items())#获取菜单的子菜单项
m = menu.item_by_path("文件->新建连接...")
print(m)

菜单项控件

m.click_input()#点击

等待机制

wait 系列

wait and wait_not
官方文档

window.wait(wait_for='ready',timeout=10,retry_inteval=1)

wait_cpu_usage_lower()
等待该进程的cpu使用率低于某个阈值
参数:
threshold:该进程的cpu占用率低于某个阈值
timeout:超时时间
retry_inteval:重试时间间隔

app = pywinauto.Application(backend='uia').connect(process=16972)
app.wait_cpu_usage_lower(threshold=5,timeout=10,retry_inteval=1)

timings系列

wait_until(10.5, .5, self.item_count, 10)#等待item_count函数的结果为5的时候开始停止等待。。。若超过10s,则超时报错

timings模块
Timings.defaults():将全局计时设为默认值
Timings.slow():将所有时间加倍(使脚本的执行速度降低)
Timings.fast():将所有计时除以2

编辑类控件

作者介绍得很清楚——实例notepad

https://www.cnblogs.com/wuxunyan/p/9366178.html

import pywinauto
#1.运行记事本程序
app = pywinauto.Application().start('notepad.exe')
#2.窗体选择
title_notepad = u'无标题-记事本'
print(app[title_notepad].print_control_identifiers())
#3.选择一个菜单项
app[title_notepad].menu_select('帮助->关于记事本')
print(dir(app[title_notepad].wrapper_object()))
time.sleep(0.2)
#4.点击新弹出窗体的确定按钮
out_note = u'关于记事本'
button_name_ok = '确定'
app[out_note][button_name_ok].click()
#5.将当前窗口截图保存
pic = app[title_notepad].capture_as_image()
print(pic)
pic.save('01.png')
#6.在记事本中输入一些文本
dlg = app[title_notepad]
dlg['Edit'].type_keys("我是方法1\n",with_spaces=True,with_newlines=True)
app.title_notepad.Edit.type_keys("我是方法2\n",with_spaces=True,with_newlines=True)
app.title_notepad.Edit.type_keys('pywinauto works!\n',with_spaces=True,with_newlines=True)
app.title_notepad.Edit.type_keys('hello word !\n',with_spaces=True,with_newlines=True)
#7.替换操作
app[title_notepad].menu_select('编辑(&E) -> 替换(&R)..')
app['替换'].print_control_identifiers()
app['替换']['Edit1'].type_keys("word")
app['替换']['Edit2'].type_keys("baby")
app['替换'].Button3.click() #全部替换
app['替换'].Button4.click() #取消
#8.退出
app[title_notepad].menu_select('文件(&F) -> 退出(&X)')#现在的top窗口为'记事本'

## app.top_window().print_control_identifiers()

app.top_window().Button2.click()

模拟用户键盘的操作

send_keys()

按键 对应参数
F5 send_keys(“{VK_F5}”)/send_keys(“{F5}”)
普通字母 send_keys(‘A’)
回车键 send_keys(“{VK_RETURN}”)
esc键 send_keys(“{VK_ESCAPE}”)
tab键 send_keys(“{VK_TAB}”)
caps Lock send_keys(“{VK_CAPITAL}”)
shift send_keys(“{VK_SHIFT}”)
ctrl键 send_keys(“{VK_CONTROL}”)
Alt键 send_keys(“{VK_MENU}”)
空格键 send_keys(“{VK_SPACE}”)
退格键 send_keys(“{VK_BACK}”)
左win键 send_keys(“{VK_LWIN}”)
右win键 send_keys(“{VK_RWIN}”)

案例:通过案件打开CMD进入python

from pywinauto.keyboard import *
import time

send_keys("{VK_LWIN}")
time.sleep(0.1)
send_keys("cmd")
send_keys("{VK_RETURN}")
#以上三行可以写成一行命令:send_keys("{VK_LWIN}cmd{VK_RETURN}")
time.sleep(1)
send_keys("python")
send_keys("{VK_RETURN}")

键盘修饰符的使用

修饰符 按键
“+” shift
“^” ctrl
“%” alt
“^s” ctrl+s
from pywinauto.keyboard import *
send_keys("^a") #全选

鼠标用户操作

操作 方法
单击 click
双击 double_click
右击 right_click
中间点击 wheel_click
按下鼠标 press
释放鼠标 replace
鼠标移动 move
滚动鼠标 scroll
from pywinauto import mouse
mouse.click(coords=(475,20))#默认单击左键,coords:像素
mouse.scroll(coords=(1919,257),wheel_dist=-3)#wheel_dist:为正向上滚动,为负向下滚动

访问系统通知区域

1、通过explorer

app = pywinauto.Application(backend='uia').connect(path="explorer")
# app["任务栏"].print_control_identifiers()
# task = app["任务栏"]["用户提示通知区域"]
task = app["任务栏"].child_window(title="用户提示通知区域", auto_id="1504", control_type="ToolBar")
# task.print_control_identifiers()
task.child_window(title="扬声器: 静音", auto_id="{7820AE73-23E3-4229-82C1-E41CB67D5B9C}", control_type="Button").click()
#task.Button19.click() #通过button点击

2、访问隐藏的通知区

app = pywinauto.Application(backend='uia').connect(path="explorer")
task = app["任务栏"].child_window(title="通知 V 形", auto_id="1502", control_type="Button")
task.click()
#隐藏窗口为桌面上的新的窗口
app["通知溢出"].print_control_identifiers()
wechat = app["通知溢出"].child_window(title="微信", auto_id="{0A61FEA6-FC1E-4277-47CE-70846CAB39F7}", control_type="Button")
wechat.click()

结合selenium实现文件上传

上传网址:https://www.layui.com/demo/upload.html

import time
from selenium import webdriver
import pywinauto
from pywinauto.keyboard import send_keys


chrome_options = webdriver.ChromeOptions()
# chrome_options.add_argument('--headless') #无头浏览模式
browser = webdriver.Chrome(chrome_options=chrome_options)
url = 'https://www.layui.com/demo/upload.html'
browser.get(url)
browser.find_element_by_xpath('//button[@id="test1"]').click()
time.sleep(10)

app = pywinauto.Desktop()#显示桌面的所有app
# app["打开"].print_control_identifiers()
#选择文件地址输入的工具框
app["打开"].wait('ready', 10, 1)
app["打开"]['Toolbar3'].click()
send_keys('C:\\Users\\ASUS\\Desktop')
send_keys("{VK_RETURN}")

#输入单个文件
#选中文件名输入框
app["打开"]["文件名(&N):Edit"].type_keys('"01.jpg"')
app["打开"]["打开(&O)"].click()

#输入多个文件(利用键盘)
send_keys('"02.jpg"')
send_keys('"03.jpg"')

标题

标签:控件,keys,pywinauto,app,send,print,使用指南
From: https://www.cnblogs.com/zdw20191029/p/17487986.html

相关文章

  • WRITE-BUG使用指南
    WRITE-BUG是做什么的?WRITE-BUG是北京聚流沙科技有限公司研发的独立开源社区。WRITE-BUG是国内首个面向学生群体的开源社区。奇文共欣赏,疑义相与析。自创建以来,我们旨在为广大学子生创立一个真正自由、开放、免费的学习社区,解决学生的难题,提供给开发者舞台。国内程序er苦付费内容久......
  • Crowdin 使用指南
    作者:飞龙创建项目一、Github登录二、之后会跳到个人信息页,点击左上角的Projects->CreateProjects来创建项目。三、在Projectname填写项目名称,注意是全站唯一名称,和Github不一样。如果重复了可以加上apachecn-前缀。如果你想让大家都看到的话,选择Publicproject,就和Github......
  • 全网最详细的 tcpdump 使用指南
    https://www.cnblogs.com/wongbingming/p/13212306.html 今天要给大家介绍的一个Unix下的一个 网络数据采集分析工具,也就是我们常说的抓包工具。与它功能类似的工具有wireshark,不同的是,wireshark有图形化界面,而tcpdump则只有命令行。由于我本人更习惯使用命令行的方......
  • ABBYY FineReader PDF 16安装教程使用指南及ABBYY16系统配置要求
    本文转载于:https://blog.csdn.net/weixin_55412152/article/details/131030190近年来,随着盲人数字阅读的普及推广,PDF格式的电子书越来越受到大家的关注和喜爱,但受读屏软件功能的限制,扫描版的PDF电子书是无法直接阅读的,这就需要将其转换为可阅读的文档格式,可对于大多数视障读者来说,......
  • Dropzone JS 使用指南(文件拖拽上传)
    JavaScript文件拖拽上传插件dropzone.js介绍[url]https://www.renfei.org/blog/dropzone-js-introduction.html[/url]DropzoneJS使用指南(文件拖拽上传)[url]http://www.open-open.com/lib/view/open1448610841329.html[/url]后台资料:基于SpringMVC的......
  • Git使用指南
    Git分布式版本控制工具课程内容Git概述Git代码托管服务Git常用命令在IDEA中使用Git 1.前言1.1什么是GitGit是一个分布式版本控制工具,主要用于管理开发过程中的源代码文件(Java类、xml文件、html页面等),在软件开发过程中被广泛使用。集成后在IDEA中可以看到G......
  • 电子公文传输系统-你先别急队-使用指南
    各角色功能1.管理员:管理用户(增删)管理部门(增删)2.拟稿人:删除未通过的公文发配公文给部门审批3.部门:审批公文下发公文一、注册(一)用户注册先进入注册界面输入用户注册信息再登录管理员角色,审核用户信息(二)部门注册先登录管理员角色,创建部门名称再进入注册......
  • 自动化漏洞扫描工具使用指南
    作为企业的IT安全管理员,您的重要任务之一,一定离不开全面的漏洞管理。即,全方位地评估、报告和缓解企业内部技术栈中,存在的各项安全弱点和网络威胁。而面对此类繁杂复杂的工作时,我们往往需要借助自动化的漏洞扫描程序,来更加高效地识别出潜在的弱点,并实现对于漏洞的基础性管理。从原理......
  • 界面控件DevExtreme使用指南 - 如何自定义上下文菜单和工具栏
    DevExtreme FileManager(文件管理器)小部件现在支持自定义内置的工具栏和上下文菜单,用户可以使用标准和定义的命令项填充项目集合,并配置设置来更改其外观和操作。DevExtreme拥有高性能的HTML5/JavaScript小部件集合,使您可以利用现代Web开发堆栈(包括React,Angular,ASP.NETCore,jQu......
  • APlayer & MetingJS 音乐播放器使用指南
    1.介绍APlayer是一个简洁漂亮、功能强大的Html5音乐播放器,GitHub地址:https://github.com/DIYgod/APlayerMetingJS是为APlayer添加网易云、QQ音乐等支持的插件,GitHub地址: https://github.com/metowolf/MetingJS2.安装引用三个文件APlayer.min.js  APlayer.min.css ......