首页 > 编程语言 >PC应用程序自动化(python)

PC应用程序自动化(python)

时间:2024-02-20 09:55:06浏览次数:33  
标签:控件 dlg Application python app 应用程序 PC print 窗口


个人向笔记。

看的是BV14Y4y1z7z6这个视频。

假期感兴趣看了一点点,感觉和我的日常工作匹配度不太高,所以先记录到这里,后面再补充。


 

PC自动化--pywinauto

0、前置

0.1 是个后端的访问。

application:作用范围是一个进程;
desktop:作用范围可以跨进程。

0.2 程序检测辅助工具

gui对象检查:
看哪个显示的控件更详细,则更适合哪个后端。
a、inspect.exe: ‪C:\Program Files (x86)\Windows Kits\10\bin\10.0.xxxxx.0\x64\inspect.exe 没有的话下载windows sdk和windows wdk,注意版本的匹配。
b、spy++.exe:安装vstudio会带着这个软件。在vs安装软件里单个组件搜“c++必备工具(?)” C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\spyxx_amd64.exe 
  遇到的问题:spy++查找窗口获取的句柄一直是00000????----只用spy++可以,spy++_amd有这个问题。
c、viewwizard:下载的都报毒,先不安装了

1、应用程序&窗口

1.1 打开应用程序

 1 from pywinauto.application import Application
 2 import time
 3 
 4 # 1. 打开windows自带的应用:记事本
 5 app=Application(backend="uia").start("notepad.exe")
 6 # 2.打开任意应用程序
 7 # 目前的应用程序一般是用uia打开,打不开的话可以再换win32。
 8 # start(r""),r防转义。
 9 # backend="后端类型",start(r"程序路径"),backend用来指定后端类型
10 app=Application(backend="uia").start(r"D:\work\wechat\WeChat.exe")

1.2 连接已经打开的应用程序

进程号和窗口句柄可以通过spy++查看,也可以用viewwizard看。

 1 from pywinauto.application import Application
 2 import time
 3 
 4 # 通过pywinauto连接已经打开的应用程序
 5 # 1. 通过进程号连接
 6 app=Application("uia").connect(process=1856)
 7 print(app)
 8 # 2.通过窗口句柄连接
 9 handler_hex="00030C6C"
10 handler_10=int(handler_hex,16)
11 app=Application("uia").connect(handle=handler_10)
12 print(app)

1.3 通过pywinauto选择指定的窗口

from pywinauto.application import Application
import time
app=Application("uia").start("notepad.exe",timeout=10)

# 查看窗口,看看列表里是否有要打开的这个文件,循环列表,打印每个元素的class_name(),即每个元素的类名。
# 所以记事本的类就是Notepad,但是不知道为什么打不开。
a=app.windows()
for i in a:
    print(i.class_name())
'''
# 打印控件会报ElementNotFoundError:找到了不止一个元素,老师用的是navicat实验,我没装;
# 可以考虑加个except ElementNotFoundError:
# 尝试打开记事本(系统软件)测试,使用窗口标题赋值,然后放大窗口和打印控件都是好的,但是类不行,报:findbestmatch.MatchError未匹配;
# 我把类给改成Dialog,行了.----考虑spy++识别的类和python认为的类不一样.
'''
# 1. 方式一 app[类名/标题]:推荐
# 1.1 使用类名选择窗口
# 这里的dlg赋值,pywinauto不会监测是否真的有这个进程,它只会直接赋值。
dlg=app["Dialog"]

# 1.2 使用窗口标题选择窗口
dlg=app["无标题 - 记事本"]

# 2. 方法二:app.窗口类名
dlg=app.Dialog

# 打印窗口中的所有控件
dlg.print_control_identifiers()

1.4 应用程序的窗口操作方法

from pywinauto.application import Application

# 窗口最大化和窗口最小化不能同时执行。
app=Application("uia").start("notepad.exe",timeout=10)
dlg=app["无标题 - 记事本"]
# 窗口最大化
dlg.maximize()
# # 窗口最小化
# dlg.minimize()
# 窗口恢复正常大小
dlg.restore()
# 查看窗口显示状态,正常:0,最大化:1
status= dlg.get_show_state()
print(status)
# 获取当前窗口显示的坐标
rect=dlg.rectangle()
print(rect)# (L810, T382, R2158, B1774)程序左上右下边距离屏幕左边和上边的距离。
# 关闭窗口
dlg.close()

 1.5 选择窗口上的控件

from pywinauto.application import Application

# 启动程序
app=Application("uia").start("notepad.exe")
# 看一下程序的信息
print(app.windows())
# 通过类打开程序
dlg=app["Dialog"]
# 打印程序的所有控件
dlg.print_control_identifiers()
# 选择菜单栏
# 方法一
# 仅适用于英文程序
menu=dlg.menu2
print(menu.print_control_identifiers())
# 方法二
menu=dlg["menu2"]
print(menu.print_control_identifiers())
# 方法三---dlg["工具识别出来的窗口标题"],我用的spy++识别记事本的菜单栏识别不到窗口标题,所以作罢。
# 这个属于了解就好,所以在这里写一下。
# 想要操作"文件":
file = dlg["menu2"]["MenuItem"]# 会报错,假设这个获取不到的话,就用下面的方法。
file = menu.child_window(title="文件(F)", control_type="MenuItem")
print(file.print_control_identifiers())

方法二与方法三附图:

下一步是要操作窗口控件,但是不同的窗口控件的操作方法是不同的,所以——

1.6 窗口控件的分类

dialog:对话框/窗口
statusbar:状态栏
static:静态内容
actiontoolbar:工具栏
pane:窗格
menu:菜单栏
menuitem:菜单项
titlebar:标题栏
treeview:树状视图
edit:编辑栏
balalaba:略


 

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

n.n 可以考虑有心情的时候看下rpa

标签:控件,dlg,Application,python,app,应用程序,PC,print,窗口
From: https://www.cnblogs.com/hanna-ov0/p/18018173

相关文章

  • python调用qq邮箱发送邮件
    代码如下,需要qq邮箱开启授权码importsmtplibfromemail.mime.textimportMIMETextfromemail.headerimportHeadermessage=MIMEText('邮件内容')#邮件内容message['From']=Header('[email protected]')#邮件发送者名字message['To']=Header(&#......
  • Ubuntu 安装 Python3.6.7
    注意:不要卸载ubuntu自带的python版本;ubuntu下不同版本的python可以共存,可直接安装python3.6。1.升级包索引和软件sudoaptupdatesudoaptupgrade-y2.安装编译所需包sudoaptinstallbuild-essentialzlib1g-devlibbz2-devlibncurses5-devlibgdbm-devlibns......
  • python的类机制
    python的类机制参考:python面向对象概念方法重写/覆盖:若从父类继承的方法不能满足子类的需求,可以对其进行改写。类变量:在实例化对象中是公用的,定义在类中,且在函数体之外,通常不作为实体变量使用。局部变量:定义在方法中的变量,只作用在当前实例。实例变量:在类的声明中,属性是......
  • Python asyncio
    asyncio作用提供了对携程的支持非阻塞:协程允许在等待异步操作的同时执行其他任务,而不会阻塞整个程序。轻量:相对于线程和进程,协程的开销较小,因为它们在单线程中执行。使用async/await语法:asyncdef声明协程函数,await用于等待异步操作的完成。事件循环:协程需要在事件循环......
  • Python生成词云--豆瓣电影短评(初学菜鸡版)
    Python生成词云--豆瓣电影短评(初学菜鸡版)目录Python生成词云--豆瓣电影短评(初学菜鸡版)1.主要涉及的库2.获取数据3.生成词云图1.主要涉及的库主要页面处理selenium数据处理,输出、读取CSVpandas、numpy对所有数据进行分词处理jieba处理图片,生成词云图word......
  • PCRec论文阅读笔记
    Abstract联合训练和测特征会影响目标域的预测,因为学习的嵌入被包含偏差信息的源域所主导。于是我们提出了异构跨域推荐的预训练和微调图。我们设计了一个新的跨域推荐的预训练图神经网络(PCRec),它采用了一个图编码器的对比自监督预训练,然后我们转移预先训练好的图编码器来初始化目......
  • Python异步编程原理篇之IO多路复用模块selector
    selector简介selector是一个实现了IO复用模型的python包,实现了IO多路复用模型的select、poll和epoll等函数。它允许程序同时监听多个文件描述符(例如套接字),并在其中任何一个就绪时进行相应的操作。这样可以有效地管理并发I/O操作,提高程序的性能和资源利用率。本篇主要......
  • Python Paramiko模块-exec_command() 和 invoke_shell() 两种操作方式
    前言Paramiko是Python语言的一个SSH客户端。可以远程连接Linux服务器,通过python对Linux进行操作,可以实现进行对远程服务器进行下载和上传文件操作。exec_command()操作importparamikossh=paramiko.SSHClient()ssh.set_missing_host_key_policy(paramiko.AutoAd......
  • Python用GAN生成对抗性神经网络判别模型拟合多维数组、分类识别手写数字图像可视化
    全文链接:https://tecdat.cn/?p=33566原文出处:拓端数据部落公众号生成对抗网络(GAN)是一种神经网络,可以生成类似于人类产生的材料,如图像、音乐、语音或文本。最近我们被客户要求撰写关于GAN生成对抗性神经网络的研究报告,包括一些图形和统计输出。近年来,GAN一直是研究的热门话题。F......
  • python实战:用SQLAlchemy作orm
    一,安装SQLAlchemy1,用pip安装(venv)[liuhongdi@imgnews]$pip3installsqlalchemy2,安装完成后查看已安装的版本:(venv)[liuhongdi@imgnews]$pip3showsqlalchemyName:SQLAlchemyVersion:2.0.27Summary:DatabaseAbstractionLibraryHome-page:https://www......