1、目的与实现步骤
1.1目的
实现一个exe程序的自动化运行,一键打开python程序后,然后自动化运行,直到结束
1.2实现步骤
- 自动打开一个exe程序
- 获取exe程序的左上角、右下角坐标
- 通过微信截图提前获取要操作控件的相对坐标(脚本中需要),结合左上角坐标值,可以获得控件在桌面的绝对坐标
- 使用pyautogui相关函数实现对控件的自动化操作
- 自动化执行完毕还有,关闭exe程序
1.3必备知识
- 知道Windows屏幕坐标系是怎么回事
- 用微信截图,从窗体左上角截到控件区域某个点,x和y的偏移值即为控件相对于窗体左上角的坐标。
2、代码实现
说明:
1.将AutoRun.py和Demo.exe放在同一个文件夹下
2.Demo.hex在AutoRun.py所在文件夹下的Code文件夹下
import shutil
import pyautogui
import time
import subprocess
import win32gui
import os
# 获取当前脚本的绝对路径
script_abs_path = os.path.abspath(__file__)
print(f"{script_abs_path}")
# 获取当前脚本所在目录的绝对路径
script_dir = os.path.dirname(script_abs_path)
print(f"{script_dir}")
# 获取目标文件的绝对路径
file_abs_path = os.path.join(script_dir, 'Demo.exe')
print(f"{file_abs_path}")
# 获取目标文件相对于当前脚本所在目录的相对路径
# relative_path = os.path.relpath(file_abs_path, script_dir)
# print(f"{relative_path}")
# 获取目标文件的绝对路径
file_abs_path1 = os.path.join(script_dir, 'Code\Demo.hex')
print(f"{file_abs_path1}")
# 1.打开exe程序
# exe_path ="E:\Desktop\pyautogui-use\Demo.exe"#绝对路径
exe_path =file_abs_path#通过py文件获取exe文件绝对路径
subprocess.Popen(exe_path)
# subprocess.run([exe_path], check=True)
time.sleep(1)
# App_hex = "E:\Desktop\pyautogui-use\Code\Demo.hex"#绝对路径
App_hex=file_abs_path1#通过py文件获取hex文件绝对路径
# 2.获取exe程序窗体左上右下角坐标
# 获取窗口句柄
hwnd = win32gui.FindWindow(None, 'Form1')
# 获取窗口左上角坐标和右下角坐标
left, top, right, bottom = win32gui.GetWindowRect(hwnd)
# 输出坐标信息
print('窗口左上角坐标:({}, {})'.format(left, top))
print('窗口右下角坐标:({}, {})'.format(right, bottom))
#3.点击按钮等一些列操作
#【1】点击Connect按钮
button_x =left+80#左上角x值加控件相对坐标
button_y = top+274#左上角y值加控件相对坐标
# 移动鼠标到按钮位置
pyautogui.moveTo(button_x, button_y)
# 点击按钮
pyautogui.click()
print('点击按钮:Connect')
time.sleep(2)
# 【2】点击选择hex文件的按钮
button_x =left+972
button_y = top+113
# 移动鼠标到按钮位置
pyautogui.moveTo(button_x, button_y)
# 点击按钮
pyautogui.click()
time.sleep(2)
print('点击按钮:选择hex')
#在文件选择框中填入hex文件的路径
pyautogui.typewrite(App_hex)
# 模拟按下 Enter 键
pyautogui.press('enter')
# 【3】设定执行次数
button_x =left+789
button_y = top+229
# 移动鼠标到按钮位置
pyautogui.moveTo(button_x, button_y)
# 点击按钮,定位到次数输入框
pyautogui.click()
time.sleep(2)
print('定位到次数输入框')
# 选中输入框中所有内容Ctrl+A
pyautogui.hotkey('ctrl', 'a')
# pyautogui.press('backspace')#正向删除
# time.sleep(2)
# pyautogui.press('delete')#反向删除
time.sleep(1)
# 在输入框中写入新次数100
pyautogui.typewrite("100")
print('输入次数:100')
# 模拟按下 Enter 键
pyautogui.press('enter')
# 【4】点击Start按钮
button_x =left+500
button_y = top+230
# 移动鼠标到按钮位置
pyautogui.moveTo(button_x, button_y)
# 点击按钮
pyautogui.click()
print('点击按钮:Start')
time.sleep(150)
# 【5】执行完毕后,点击Disconnect按钮
button_x =left+198
button_y = top+271
# 移动鼠标到按钮位置
pyautogui.moveTo(button_x, button_y)
# 点击按钮
pyautogui.click()
print('点击按钮:Disconnect')
time.sleep(2)
# 【6】点击退出exe的按钮
button_x =left+989
button_y = top+17
# 移动鼠标到按钮位置
pyautogui.moveTo(button_x, button_y)
# 点击按钮
pyautogui.click()
print('点击按钮:关闭exe程序')
time.sleep(1)
pyautogui.press('enter')
time.sleep(2)
3、核心代码解读
import pyautogui # 用来自动化操作控件
import time #用来延时
import subprocess #用来打开exe程序
import win32gui #用来获取exe程序窗体左上角坐标
import os #用来获取文件的绝对地址
4、通过bat启动python脚本
rem 方法一
@echo off
set PYTHON_PATH="D:\\Program Files\\Python\Python39\\python.exe"
%PYTHON_PATH% AutoRun.py
rem pause
rem 方法二
rem @echo off
rem E:
rem cd E:\Desktop\pyautogui-use
rem "D:\Program Files\Python\Python39\python.exe" AutoRun.py
rem pause
5、通过bat运行python脚本多次(10次)
@echo off
setlocal enabledelayedexpansion
set PYTHON_PATH="D:\\Program Files\\Python\Python39\\python.exe"
set SCRIPT_PATH=AutoRun.py
set COUNT=0
:loop
if !COUNT! lss 10 (
echo Running iteration !COUNT!
%PYTHON_PATH% !SCRIPT_PATH!
set /A COUNT=!COUNT!+1
goto loop
)
endlocal
rem pause