首页 > 其他分享 >自动化之pywinauto

自动化之pywinauto

时间:2024-07-29 15:52:24浏览次数:16  
标签:control pywinauto 自动化 dialog win print main click

官方文档: https://pywinauto.readthedocs.io/en/latest/contents.html

 

[安装]

pip install pywinauto

 

[使用]

1.连接

 

 

使用实例:

1)自动打开微信链接

import random
import time

from pywinauto import mouse, keyboard
import pywinauto.findwindows
from pywinauto.application import Application
import pyautogui

# 连接方式1)
# app = Application(backend='uia').connect(process=19004)

# 连接方式2)
app = Application(backend='uia').connect(path=r'D:\software\WeChat\WeChat.exe')

# 该窗口中的对话框
# print(app.windows())
# Chrome_WidgetWin_0


# # 打开
# app = Application(backend='uia').start('D:\software\WeChat\WeChat.exe')
# time.sleep(5)
# 拿到微信主窗口
win_main_dialog = app.window(title='微信', class_name='WeChatMainWndForPC')

# 判断是否未dialog, 一个微信就是一个dialog -->窗口
# print(win_main_dialog.is_dialog)


# print(win_main_dialog.wrapper_object())


# 给空间画一个红色框便于看出
win_main_dialog.draw_outline(colour='red')

# 打印当前所有空间和属性
# win_main_dialog.print_control_identifiers(depth=None, filename=None)

time.sleep(1)

''' 一般使用click_input代替click'''

def get_element_position(ele):
    """获取元素的中心点位置"""
    element_position = ele.rectangle()
    # 算出中心点位置
    center_position = (int((element_position.left + element_position.right) / 2),
                       int((element_position.top + element_position.bottom) / 2))
    return center_position




def send_msg():
    # 找到文件传输助手
    file_helper_ele = win_main_dialog.child_window(title="文件传输助手已置顶", control_type="ListItem")
    mouse.click(button='left', coords=get_element_position(file_helper_ele))

    # 获取输入框元素, 并模拟输入
    edit_ele = win_main_dialog.child_window(title="文件传输助手", control_type="Edit")
    time.sleep(2)
    edit_ele.type_keys("hello")
    keyboard.send_keys("{ENTER}")


def click_buttons():
    '''分别进行点击'''
    win_main_dialog.child_window(title="聊天", control_type="Button").click_input()
    time.sleep(2)
    win_main_dialog.child_window(title="通讯录", control_type="Button").click_input()
    time.sleep(2)
    win_main_dialog.child_window(title="朋友圈", control_type="Button").click_input()
    time.sleep(2)

def gui():
    # 使用pyautogui方式是比较固定(坐标)的方式
    pyautogui.click(x=622, y=183, clicks=1, interval=0.1)
    time.sleep(random.randint(3, 5))
    pyautogui.click(x=756, y=78, clicks=1, interval=0.1)



'''
depth: 打印深度, 缺省最大深度
filenmae: 返回的标识存成文件, 可以指定 eg:a.txt
'''

# 查找主窗口下的某个窗口
# chat_list = win_main_dialog.child_window(control_type='List', title='会话')
# first = chat_list.items()[0]  # 第一个聊天项, 支持循环, 索引
# chat_list.scroll(direction='down', amount='page')  # 向下滚动一页

# first.focus()

def main():
    # 找到聊天框
    chat_list_ele = win_main_dialog.child_window(title="聊天", control_type="Button")
    mouse.click(button='left', coords=get_element_position(chat_list_ele))
    time.sleep(1)
    # 找到指定聊天人
    ln = win_main_dialog.child_window(title="Learning已置顶", control_type="ListItem")
    mouse.click(button='left', coords=get_element_position(ln))

    time.sleep(1)
    # 找到指定链接并点击
    lk = win_main_dialog.child_window(title=r"https://www.cnblogs.com/xingxia", control_type="ListItem")
    mouse.click(button='left', coords=get_element_position(lk))

    time.sleep(random.randint(3, 5))
    # 关闭内置浏览器

    # 1) 查询当前内置浏览器窗格信息
    wins = pywinauto.findwindows.find_elements(backend='uia')
    print('所有窗口:', wins)

    wins = pywinauto.findwindows.find_elements(backend='uia')
    # print('所有窗口:', wins)
    pid = 0
    for win in wins:
        print('=======================')
        print(dir(win))
        print(win.name)  # 窗口名称
        # print(win.control_id)  # 都是0
        # print(win.process_id)
        # print(win.automation_id)
        print(win.class_name)  # 类名
        # print(win.control_id)  # 都是0
        print(win.runtime_id)  # (id, 进程ID)
        if win.class_name == 'Chrome_WidgetWin_0':
            pid = win.runtime_id[1]

    app2 = Application(backend='uia').connect(handle=pid)
    # print(app2.window().print_control_identifiers())

    app2.window().child_window(title='关闭', control_type='Button', found_index=0).click_input()


if __name__ == '__main__':
    main()  # 自动化主流程
    # send_msg()  # 发送消息
    # click_buttons()
    # gui()

说明:

 

标签:control,pywinauto,自动化,dialog,win,print,main,click
From: https://www.cnblogs.com/xingxia/p/18330263/python_pywinauto

相关文章

  • 搭建自动化 Web 页面性能检测系统 —— 部署篇
    我们是袋鼠云数栈UED团队,致力于打造优秀的一站式数据中台产品。我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值。本文作者:琉易liuxianyu.cn这一篇是系列文章:搭建自动化Web页面性能检测系统——设计篇搭建自动化Web页面性能检测系统——实现篇作为......
  • 自动化脚本
    最近也有负责了一些运维部署的工作,每次发包都比较麻烦,编写了一个自动化脚本大概思路是从github上拉取对应分支代码到本地,本地编译,复制拷贝到目标目录,启动执行注意最后要赋予文件可执行权限#!/bin/bash#Promptuserforenvironmentecho"Enterenvironment(dev,test,o......
  • 界面自动化测试录制工具,让python selenium自动化测试脚本开发更加方便
    自动化测试中,QTP和seleniumIDE都支持浏览器录制与回放功能,简单的来说就像一个记录操作步骤的机器人,可以按照记录的步骤重新执行一遍,这就是脚本录制。个人觉得传统录制工具有些弊端,加上要定制支持我自己的自动化框架(python单机版自动化测试框架源代码),所以自己用javascript写了一个......
  • Selenium4.0自动化测试从入门到实践介绍
    前言:本专栏是以Selenium4.0 +Python3为基础的UI自动化测试,小编结合自己多年的工作实践经验将工作过程中对Selenium的思考、实践倾囊相授:主要包括Selenium基础用法、高级用法、测试环境切换、图表自动化、PO模式(页面对象)、关键字模式、持续集成、测试报告生成、疑难杂症等,通......
  • 《最新出炉》系列入门篇-Python+Playwright自动化测试-56- 多文件上传 - 下篇
    1.简介前边的两篇文章中,宏哥分别对input控件上传文件和非input控件上传文件进行了从理论到实践地讲解和介绍,但是后来又有人提出疑问,前边讲解和介绍的都是上传一个文件,如果上传多个文件,Playwright是如何实现的呢?宏哥看了一下官方的API也有上传多个文件的API,那么今天就来讲解和介绍......
  • Linkedin 自动化连接机器人与搜索人员
    我确实有一个副业项目,我发现它非常具有挑战性,同时也非常有趣。所以!想法很简单!使用Selenium!登录Linkedln!转到带有您的参数的搜索链接-在我的例子中是技术。招聘人员。每页有10个按钮。按钮的状态为“连接”、“关注”或“消息”目标是每次我检查按钮时,如果它是......
  • 网安工具系列:ARL灯塔魔改,自动化资产搜集+漏扫+推送+1W加指纹
    ARL灯塔魔改,自动化资产搜集+漏扫+推送+1W加指纹ARL灯塔魔改,自动化资产搜集+漏扫+推送+1W加指纹0x01前言0x02准备工作一台或两台linux服务器:一台:两台:vps使用的操作系统均为centos0x03工具安装配置3.1灯塔ARL3.1.1安装docker环境3.1.2d......
  • 数字资产自动化交易之DEX与CEX套利
    监控去中心化交易所(DEX)和中心化交易所(CEX)之间的套利机会涉及实时数据监控、分析和交易执行。以下是一个监控和执行套利机会的综合步骤指南:1.数据收集实时价格数据DEX:使用DEX的API获取交易对的实时价格数据。常见的DEX包括Uniswap、SushiSwap、PancakeSwap等。这些......
  • 《最新出炉》系列入门篇-Python+Playwright自动化测试-55- 上传文件 (非input控件)- 中
    1.简介在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等。所以宏哥打算按上传文件的分类对其进行一下讲解和分享。2.上传文件的API(非input控件)Playwright是一个现代化的自动化测试工具,它支持多种浏览器和操作系统,可以帮助开发人员......
  • Python 实现行为驱动开发 (BDD) 自动化测试详解
    在当今的软件开发领域,行为驱动开发(BehaviorDrivenDevelopment,BDD)作为一种新兴的测试方法,逐渐受到越来越多开发者的关注和青睐。Python作为一门功能强大且易于使用的编程语言,在实现BDD方面也有着独特的优势。那么,如何利用Python实现BDD自动化测试呢?本文将为你详细解析。如何......