工作中有一个系统需要重复简单的操作,基本都是点击按钮。最近在学python,想知道能不能写个脚本来做这个。基本思路是利用pyautogui库来识别屏幕上的按钮,并进行一系列的点击操作。由于个人知识薄弱,折腾了半天,踩了很多坑,特此记录一下。其中最麻烦的是要操作的应用程序窗口的激活。如果要操作的窗口没有焦点,则脚本无法点击。激活应用程序以获得窗口焦点这些操作只能通过操作系统来完成。对于macOS,可以执行如下代码:fromCocoaimportNSRunningApplication,NSApplicationActivateIgnoringOtherApps#Activate应用程序获取焦点,pid为应用程序的进程号。打包后即可导入。pyobjc是一个通过python调用macOSAPI的库。因为对macOS下的开发了解不多,看到这个库的时候基本一头雾水。pyobjc中的API基本对应macOS中Objective-C的API。获取窗口焦点的问题解决了,接下来的坑就是按钮搜索定位的问题了。我有一个按钮,pyautogui.locateCenterOnScreen('btn.png')得到的结果是(x=1947,y=1405),然后我用那个位置调用pyautogui.click(x=1947,y=1405)来点击,发现鼠标已经超出了屏幕。我的屏幕分辨率是2560x1600,但是pyautogui.size()得到的屏幕尺寸是1440x900,pyautogui.screenshot()得到的图片尺寸是2880x1800。结合按钮在屏幕中的大致位置,发现调用pyautogui.locateCenterOnScreen时使用的屏幕尺寸为2880x1800,调用pyautogui.click时使用的屏幕尺寸为1440x900。因此,要点击按钮正确,位置坐标必须转换:location=pyautogui.locateCenterOnScreen('btn.png')screen=pyautogui.size()x=int(location.x*screen.width/2880)y=int(location.y*screen.height/1800)pyautogui.click(x=x,y=y)这样就可以点击按钮的正确位置了,剩下的就是用pyautogui库的常规操作了。使用pyautogui比较麻烦的一点是每个按钮都需要单独截图,而且还要保证应用窗口的大小和截图一致,这样才能识别按钮的位置。我曾尝试使用ocr技术通过按钮的文字信息直接识别按钮位置,尝试了几天,一直没有找到有效的方法。如果有人知道这件事,请告诉我。以上就是我学习python的一个应用记录。
