You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python与.exe文件交互:实现点击操作及文件上传

问题分析

你当前使用的subprocess模块仅适用于控制台(CLI)程序的输入输出交互,如果temp.exe是GUI程序,通过标准输入传递文本的方式完全无法触发按钮点击这类GUI操作,这就是代码只打开程序但无后续动作的原因。要实现GUI程序的点击和文件上传,需要使用专门的GUI自动化工具。


解决方案

方案1:PyAutoGUI(适合简单GUI场景,上手快)

PyAutoGUI通过模拟鼠标、键盘操作实现交互,适合控件定位简单的程序。

步骤:

  1. 安装依赖:
pip install pyautogui pygetwindow
  1. 示例代码:
import subprocess
import pyautogui
import pygetwindow as gw
import time

# 启动目标程序
subprocess.Popen(['temp.exe'])
time.sleep(5)  # 等待程序完全加载

# 激活程序窗口(替换为你的窗口标题)
window = gw.getWindowsWithTitle("Temp程序窗口")[0]
window.activate()

# 模拟点击"Continue"按钮(坐标需自行获取:运行pyautogui.displayMousePosition()查看实时坐标)
pyautogui.click(x=150, y=250)
time.sleep(1)

# 点击上传按钮
pyautogui.click(x=350, y=450)
time.sleep(2)

# 在系统文件上传对话框中输入文件路径并确认
pyautogui.typewrite("C:\\你的文件路径\\test.txt")
time.sleep(1)
pyautogui.press("enter")

注意:

  • 坐标需根据实际窗口位置调整,运行pyautogui.displayMousePosition()可实时显示鼠标坐标
  • 延迟时间time.sleep()需根据程序加载速度调整

方案2:Pywinauto(适合复杂GUI场景,更稳定)

Pywinauto直接识别程序控件(无需依赖坐标),交互更精准可靠,适合复杂GUI程序。

步骤:

  1. 安装依赖:
pip install pywinauto
  1. 示例代码:
from pywinauto import Application
import time

# 启动程序(若为32位程序,需添加backend="win32")
app = Application().start("temp.exe")
time.sleep(3)

# 连接到程序窗口(替换为实际窗口标题)
main_window = app.window(title="Temp程序主窗口")
main_window.set_focus()

# 查看窗口所有控件(运行一次获取控件名称/文本,方便后续定位)
# main_window.print_control_identifiers()

# 点击Continue按钮(根据控件文本识别)
main_window.Button(text="Continue").click()
time.sleep(1)

# 点击上传按钮
main_window.Button(text="选择文件上传").click()
time.sleep(2)

# 处理系统文件上传对话框
file_dialog = app.window(title="打开")
file_dialog.Edit.set_text("C:\\你的文件路径\\test.txt")
file_dialog.Button(text="打开").click()

注意:

  • 运行main_window.print_control_identifiers()可列出窗口所有控件信息,用于精准定位按钮
  • 若程序是32位,启动时需指定backend:app = Application(backend="win32").start("temp.exe")

内容的提问来源于stack exchange,提问作者Anna Misquitta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 06:35:11