分享

巧用Python : 用PyAutoGUI模块实现自动化

 F2967527 2022-06-22 发布于北京

写在前头

最近学习了一下PyAutoGUI模块,就把做的几个例子录成了视频教程,Python提供的第三方库实在方便,通过阅读各个模块官网上提供的文档对快速掌握这些现成的模块至关重要,我所做的例子只是用到了人家的皮毛,要想更深入的理解,还需直接阅读官方提供的第一手资料,例如本次的PyAutoGUI模块,可以访问下面的网址查看文档:

https://pyautogui.readthedocs.io/en/latest/

另外,本课的例子不能直接拿来运行哟!因为这些坐标位置是按照我的电脑上图标位置进行设定的,若迁移到别的环境,可能需要做出适当的调整。

PyAutoGUI模块的安装

尝试课程所涉及例子之前,需要用pip命令安装所需要的PyAutoGUI模块

pip install pyautogui

获得鼠标当前的位置坐标

在第一节课的例子中,我利用pyautogui的position方法得到了坐标信息的元组,来为下一步确定鼠标该移动到哪里才能让程序坞出现在屏幕上作准备。

print(pyautogui.position())

控制鼠标和键盘

在第二节课的例子中,我演示了如何将鼠标移至指定位置、点击,并模拟键盘输入的操作,其中涉及pyautogui的方法有:moveTo(), click(), typewrite(要输入的字符串, 输入间隔时长), press(代表对应键字符串),其中可以在官方文档中搜索KEYBOARD_KEYS来查看对应键字符串的关键字列表。

1import py
2import pyautogui, time
3try:
4    pyautogui.moveTo(358899)
5    time.sleep(1)
6    pyautogui.click(358899)
7    time.sleep(1)
8    pyautogui.click(48891)
9    time.sleep(1)
10    pyautogui.typewrite('www.bing.com',0.5)
11    time.sleep(1)
12    pyautogui.press('enter')
13except KeyboardInterrupt:
14    print('\nStop!')

在屏幕上定位指定图片

第二节课中让鼠标自动移动到固定位置进行操作的方法受限于指定的坐标,浏览器图标或浏览器窗口稍有移动,都会影响程序正常打开浏览器的成功率。因此在第三节课视频中我介绍了pyautogui的另一个方法locateOnScreen(要寻找的图片路径字符串),在屏幕上查找这个图片,如果没找到返回None,找到的话,返回一个Box类型的对象,其中包含了找到区域的左上角位置及长宽数据。

然而,多次运行程序后发现成功率仍然不高,我的推测是由于图片存储时有减损,图像透明度,或者图像大小的变化导致无法正常定位。在pyautogui的官网例子中,介绍了locateOnScreen的另一个参数confidence:

图片

添加上这个参数后,能够大大提高程序运行的成功率,改进后的程序中,我把参数的值设为了0.5,结果成功率明显提高。

FAIL-SAFE

在使用pyautogui编程过程中,如果在一个无限循环中鼠标不停处于被移动的状态,会有一种电脑失控的可怕效果,除了硬关机,还有什么方法呢,pyautogui提供了一个FAILSAFE来让你脱困,在官网文档中对它的解释如下:

图片

只要在受困时,使用洪荒之力移动你的鼠标将它瞬间移到屏幕的任意四角之一,就能弹出FailSafeException这个异常。另外,看到最后加黑大写的那句了吗?一般默认FAILSAFE已经是True的值了,虽然你可以在代码里设成False,但是人家还是高度建议咱别这么干!

完整代码

 1import py
2import pyautogui, time
3try:
4    iconloc = pyautogui.locateOnScreen('icon.png',confidence=0.5)
5    pyautogui.moveTo(358899)
6    #time.sleep(1)
7    while iconloc == None:
8        iconloc = pyautogui.locateOnScreen('icon.png',confidence=0.5)
9        print(f'iconloc:{iconloc}')
10
11    pyautogui.click(iconloc)
12    time.sleep(1)
13    browserloc = pyautogui.locateOnScreen('browser.png')
14    while browserloc == None:
15        browserloc = pyautogui.locateOnScreen('browser.png')
16        print(f'browserloc:{browserloc}')
17    pyautogui.click(browserloc)
18    time.sleep(1)
19    pyautogui.typewrite('www.bing.com',0.5)
20    time.sleep(1)
21    pyautogui.press('enter')
22except KeyboardInterrupt:
23    print('\nStop!')
图片

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多