2025年3月31日 星期一 乙巳(蛇)年 正月初一 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Python

聊聊 PC 端自动化最佳方案 - WinAppDriver

时间:10-14来源:作者:点击数:25
CDSY,CDSY.XYZ

1. 前言

一提到自动化,可能大家想到的是 App 端的Appium、Airtest、AutoJS,亦或是 Selenium、Puppeteer、Cypress 等 Web 端的自动化框架

本篇文章,我将和大家聊聊 PC 端的自动化工具-WinAppDriver

2. 准备

WinAppDriver,全称为Windows Application Driver,它是 Windows 上一个类似 Selenium 的 UI 自动化驱动服务框架

它支持 Appium,可以使用Appium-Python-Client 依赖库完成对 Windows桌面程序的自动化操作

项目地址:https://github.com/Microsoft/WinAppDriver

需要注意的是,要使用WinAppDriver服务框架完成 Windows 的自动化,需要满足Windows10 或 Windows Server 2016 以上系统

另外,它支持的应用程序包含:

  • UWP -Universal Windows Platform
  • WinForms - Windows Forms
  • WPF - Windows Presentation Foundation
  • Win32 - Classic Windows

在实现之前,我们需要做好以下准备工作

2-1 开启「开发者模式」

关键字搜索「开发者设置 」,选择开启「 开发者模式 」

图片

2-2安装窗口组件元素识别工具

常用的 2 种窗口元素识别工具为:inspect.exe、FlaUInspect

其中

作为官方的组件元素识别工具,inspect.exe集成于Windows SDK

如果本地不存在该文件,可以通过下面链接进行安装

https://download.microsoft.com/download/4/d/2/4d2b7011-606a-467e-99b4-99550bf24ffc/windowssdk/winsdksetup.exe

相比inspect.exe,FlaUInspect界面更简洁,功能更易用(推荐)

项目地址:https://github.com/FlaUI/FlaUInspect

2-3安装 WinAppDriver

通过下面链接下载WinAppDriver 应用程序,并在本地运行起来

https://github.com/Microsoft/WinAppDriver/releases

2-4搭建 Appium环境

这部分内容涉及NodeJS 安装及 Appium-Server环境的搭建

可以参考:https://www.cdsy.xyz/computer/programme/Python/241014/cd63949.html

2-5安装依赖

最后安装 Python 依赖库Appium-Python-Client

  • # 安装依赖 Appium-Python-Client
  • pip3 install Appium-Python-Client

3.实战一下

我们以操作 PC 端的微信为例,聊聊自动化的常见步骤

首先,我们在本机打开WinAppDriver服务,让它在后台运行

然后,我们使用 Python 编写自动化脚本

通过 ip 地址、端口号及 PC 版微信的绝对路径,使用 Appium 打开微信

  • import time, os
  • from appium import webdriver
  • from selenium.webdriver import ActionChains
  • from selenium.webdriver.common.keys import Keys
  • from time import sleep
  • class Auto():
  •     def open_weixin(self, host='localhost', port=4723):
  •         # 打开WinAppDriver服务
  •         # 注意:如果手动开启,则可以注释掉
  •         # os.system(r'start "" /d "C:\Program Files\Windows Application Driver\"  "WinAppDriver.exe"')
  •         # 配置信息
  •         # 包含:平台名、系统、应用程序绝对路径
  •         desired_caps = {'platformName''Windows''deviceName''WindowsPC',
  •                         'app'r"D:\Program Files (x86)\Tencent\WeChat\WeChat.exe"}
  •         try:
  •             # 连接WinAppDriver服务,打开目标软件
  •             self.driver = webdriver.Remote('http://{}:{}'.format(host, port), desired_caps)
  •         except Exception as e:
  •             raise AssertionError(e)

接着,通过「组件元素识别工具」拿到界面元素的属性值,执行常见的点击、移动、滑动等操作

比如:点击「 文件传输助手 」,发送一条信息

  • # 给文件传输助手发送一条信息
  • def send_msg(self, element_name, msg):
  •     """
  •     :param element_name:元素name值
  •     :param msg:
  •     :return:
  •     """
  •     # 通过name属性,找到目标元素
  •     chat_element = self.weixin_driver.find_element_by_name(target_name)
  •     # 点击元素,进入聊天界面
  •     chat_element.click()
  •     # 找到输入框,并输入
  •     self.weixin_driver.find_element_by_name("输入").send_keys(msg)
  •     # 点击右下角的发送,发送消息出去
  •     self.weixin_driver.find_element_by_name("发送(S)").click()

需要注意的是,如果涉及界面的滑动,可以使用「ActionChains」移动鼠标,然后使用win32api 和win32con 模拟屏幕滑动即可

  • import win32api
  • import win32con
  • from appium import webdriver
  • from selenium.webdriver import ActionChains
  • # 模拟屏幕滑动
  • # 1、移动到某个元素区域
  • ActionChains(self.weixin_driver).move_to_element(
  •      self.weixin_driver.find_element_by_name("element_name")).perform()
  • # 2、滑动界面
  • # 比如,向上滚动,模拟滑动
  • win32api.mouse_event(win32con.MOUSEEVENTF_WHEEL, 00, -500)

完成自动化操作后,就可以主动释放资源、关闭WinAppDriver服务

  • # 释放资源及关闭服务
  • def tearDownFunc(self):
  •     print("准备退出")
  •     sleep(2)
  •     # 1、释放资源
  •     self.weixin_driver.quit()
  •     # 2、关闭WinAppDriver应用程序
  •     os.system(' @taskkill /f /im WinAppDriver.exe')

4. 最后

在实际使用过程中,可能会遇到复杂的桌面应用程序,这时我们可以通过打印驱动对象的「page_source」元素控制树值,以此来帮助我们进行快速定位元素,进而完善自动化脚本

CDSY,CDSY.XYZ
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐