使用pyautogui

时间:2017-02-23 09:49:30

标签: python automation pyautogui

我使用pyautogui编写了一个脚本,它应该启动一个程序(一个IDE),然后开始使用它。 到目前为止这是脚本:

#! python3
# mouseNow.py - Displays the mouse cursor's current position.
import pyautogui, sys, subprocess
from time import sleep

x,y = 1100,550

subprocess.call([r'C:\...exe',  arg1, arg2])
pyautogui.click(x,y)
sleep(5) # 2 sec should suffice but this is for safety
pyautogui.typewrite(my_string)
pyautogui.press('enter')

这很好但我想要便携。 {I-{}}值取决于程序提示在我启动程序后出现在屏幕上的位置,但我认为这不是可移植的。有没有办法将鼠标指向提示而不提供const参数?像x,y

这样的东西

另外,我使用move_mouse_to_window_of_this_process_after_starting_it()所以我会在出现后将数据写入窗口,但我想这不是一个好方法(有些PC会运行这个我想是慢得多,所以有没有办法知道提示何时出现,然后进行sleep()

编辑:我找到了pyautogui.typewrite(my_string)的简单解决方案 :

move_mouse_to_window_of_this_process_after_starting_it()

2 个答案:

答案 0 :(得分:1)

您与.exe交互的方式排除了坐标或盲目触发的替代方法(Tab,Tab,Enter等..)。

如果应用程序有API,您可以以编程方式与其进行交互。 如果它没有,你只能尝试匹配x屏幕分辨率的位置,这只有在全屏/窗口全屏使用GUI时才会这样。

答案 1 :(得分:1)

如果您需要可移植且可靠的解决方案,则必须找到支持辅助功能技术的库,以便按文本访问GUI元素。基本技术是:

  • Win32 API,MS UI自动化(Windows)
  • AT-SPI(Linux)
  • Apple Accessibility API(MacOS)

有几个开源GUI自动化库支持其中一些技术(通常为1或2)。 Python解决方案:

关于硬睡眠与灵活等待也有a thread on StackOverflow

享受! :)