当前位置:   article > 正文

一个神奇的Python库:PyAutoGUI,玩转微信及各种软件自动化_pyautogui.moveto

pyautogui.moveto

开始动手动脑

本地电脑打开 Powershell/Terminal ,切换到 Python 环境,输入以下指令即可安装 PyAutoGUI:

pip install pyautogui  

  • 1
  • 2

安装好后就可以直接开始使用了。

首先导入包:

import pyautogui  

  • 1
  • 2

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

常用基础操作

1、定位: 这是最关键的,找到要点击的位置(像素坐标)。

规定坐标原点是屏幕左上角。 我们可以使用以下指令查看屏幕大小:

# 查看屏幕尺寸,目前只支持在主屏上操作  
pyautogui.size()  

  • 1
  • 2
  • 3

查看当前鼠标所在位置:

# 查看当前鼠标位置,坐标原点是屏幕左上角  
pyautogui.position() 
  • 1
  • 2

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2、移动鼠标: 找到要点击鼠标位置后,即可开始移动鼠标。移动鼠标使用moveTo函数,可以通过 duration 参数设置移动速度。

# 在 num_seconds 秒内将鼠标移动到 (x,y)  
x,y = (409, 300)  
num_seconds = 1  
pyautogui.moveTo(x, y, duration=num_seconds)  
  • 1
  • 2
  • 3
  • 4

还可以使用moveRel函数相对路径移动,将当前位置作为坐标轴原点。

# 在 num_seconds 秒内将鼠标移动到相对当前的位置 (x,y)  
x,y = (409, 300)  
num_seconds = 1  
pyautogui.moveRel(x, y, duration=num_seconds)  
  • 1
  • 2
  • 3
  • 4

3、点击: 鼠标移动到对应位置后,即可点击了,这是最终操作,点点点~

点击流程是先移动鼠标到指定位置,然后进行点击,使用click函数,参数说明:

  • x,y 鼠标点击位置

  • clicks 点击次数

  • interval 点击频率,如果是1 就是每秒点击1次,直到完成 clicks 次点击

  • button 支持 left right middle,分别对应鼠标左键、右键、中键

x,y = (620, 538)  
num_of_clicks = 2  
secs_between_clicks = 1  
pyautogui.click(x=x, y=y, clicks=num_of_clicks, interval=secs_between_clicks, button='left')  

  • 1
  • 2
  • 3
  • 4
  • 5

应用案例1:关注公众号太多,程序帮你批量取关

766个,真难顶!每天公众号里都有如潮水般的消息涌出,久而久之就懒得去看了,但其中也有很多关键信息,为提高阅读效率,先批量取关,然后根据需要再关注吧~

分析自动化步骤

先看手动取关步骤:

  • 点击联系人-公众号(直接手动)

  • 点开要取关公众号-点击查看历史消息外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 点击已关注-点击不再关注,即可

从上面步骤不难分析出,可以自动化操作的是后两步,总共涉及4个需要点击的地方,正常情况这四个地方不会有变化,所以我们只需找到这四个地方坐标,然后开启自动化,按顺序点击即可。

找要点击位置坐标

比较简单的方法是直接将鼠标放到对应位置,然后使用pyautogui.position()获取鼠标所在位置。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传这样操作的前提是你得有两个屏幕,不然你没地方运行代码查坐标。当然还有一种方法就是使用截屏,去看对应位置的像素坐标。

  • 要取关公众号坐标:Point(x=388, y=386)

  • 查看历史消息坐标:Point(x=861, y=342)

  • 已关注坐标:Point(x=704, y=373)

  • 不再关注坐标:Point(x=891, y=539)

测试自动化

有了前面学习分析,写出自动化代码不难,一个for循环,然后里面点击 点击 点击 点击即可,代码如下。

def click_btn(x,y):  
    num_of_clicks = 1  
    secs_between_clicks = 1  
    pyautogui.click(x=x, y=y, clicks=num_of_clicks, interval=secs_between_clicks, button='left')  
  
# 自动化间隔  
pyautogui.PAUSE = 1  
for i in range(3):  
    # 点开`要取关公众号`-点击`查看历史消息`  
    click_btn(388,386)  
    print("点击了 要取关公众号")  
    click_btn(861,342)  
    print("点击了 查看历史消息")  
    # 点击`已关注`-点击`不再关注`,即可  
    click_btn(704,373)  
    print("点击了 已关注")  
    click_btn(891,539)  
    print("点击了 不再关注")  
    break  

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

实际运行发现了一个问题,就是 要取关公众号 位置是不变的,但其它的 查看历史消息、已关注 是会受公众号简介内容长短而变化的,公众号简介长,按钮位置就会下移。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如何定位 查看历史消息、已关注 按钮位置成了现在的主要问题!

主要问题:根据文字定位

查了会资料,发现 pyautogui 有一个内置函数就支持通过指定内容来查找对应内容所在位置,这里用到的就是locateOnScreen函数,其原理是通过图像识别去匹配需要查找内容在图片中的像素区域位置。以下是其工作原理的简要描述:

  1. 截屏:首先,pyautogui 会获取当前屏幕的截图。

  2. 模板匹配:然后,pyautogui 将你提供的参考图像(模板)在截取的屏幕图像上移动,尝试在屏幕上找到一个位置,使得参考图像与屏幕截图的某个区域的匹配度最高。

  3. 像素比较:在模板匹配过程中,算法会对参考图像和屏幕截图的每个像素进行比较,计算它们之间的相似度。相似度通常是通过计算颜色差异来评估的。

  4. 确定位置:如果找到了一个区域,其与参考图像的相似度超过了设定的阈值(有时你可以设置一个confidence参数来指定这个阈值),pyautogui 便会返回这个区域的坐标和大小。这个坐标是屏幕截图上参考图像左上角的位置。

  5. 返回结果:如果找到了匹配的区域,pyautogui 返回一个包含了left, top, width, height的元组或矩形对象;如果没有找到匹配区域,它会返回None

主要参数解析:

  • image:这是一个字符串或Pillow的Image对象,指定要在屏幕上查找的图像。如果是字符串,它应该是图像文件的路径。

  • confidence:可选参数,指定匹配的可信度阈值,介于0到1之间。一个更高的值意味着更精确的匹配,但可能导致没有找到匹配项。默认情况下,这个值是未设置的,但是如果安装了OpenCV,可以使用这个参数。

  • region:可选参数,一个四元组(left, top, width, height),指定屏幕上一个区域来限制搜索范围。这可以提高搜索速度并减少误匹配。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

经过多次测试发现 locateOnScreen 匹配出来的坐标 x、y 值都是原位置的2倍,所以得到了查找 查看历史消息、已关注 按钮位置的方法,代码如下:

text_location = pyautogui.locateOnScreen(image='ckls.jpg', confidence=0.7)  
click_btn(text_location.left/2+15, text_location.top/2+4)  
print("点击了 查看历史消息")  
text_location = pyautogui.locateOnScreen(image='ygz.jpg', confidence=0.7)  
click_btn(text_location.left/2+25, text_location.top/2+10)  
print("点击了 已关注")  

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

其中 ckls.jpg、ygz.jpg 为 查看历史消息、已关注 截图。

再次测试自动化

结合前面分析,将代码稍作修改即可,测试的时候发现新问题,点击查看历史消息后,公众号详情页面加载需要时间,如果直接执行点击已关注可能会出现错误,所以代码里在点击查看历史消息后加了time.sleep(1.5)给点缓冲时间,具体代码如下:(大家复现的时候里面的坐标需要改成大家屏幕对应的,位置分析方法前面已经分享过了)

import pyautogui  
import time  
def click_btn(x,y):  
    num_of_clicks = 1  
    secs_between_clicks = 1  
    pyautogui.click(x=x, y=y, clicks=num_of_clicks, interval=secs_between_clicks, button='left')  
  
# 自动化间隔  
for i in range(671):  
    try:  
        print(f"正在取关第{i+1}个公众号号")  
        # 点开`要取关公众号`-点击`查看历史消息`  
        click_btn(509,497)  
        print("点击了 要取关公众号")  
        text_location = pyautogui.locateOnScreen('ckls.jpg', confidence=0.7)  
        click_btn(text_location.left/2+15, text_location.top/2+4)  
        # print("点击了 查看历史消息")  
        # 上一步后加载页面需要时间  
        time.sleep(1.5)  
        text_location = pyautogui.locateOnScreen('ygz.jpg', confidence=0.7)  
        click_btn(text_location.left/2+25, text_location.top/2+10)  
        # print("点击了 已关注")  
        click_btn(949,620)  
        print("点击了 不再关注")  
    except Exception as e:  
        continue  

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

运行结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

以上就是“一个神奇的Python库:PyAutoGUI,玩转微信及各种软件自动化”的全部内容,希望对你有所帮助。

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

在这里插入图片描述

二、Python必备开发工具

img

三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

五、Python练习题

检查学习结果。

img

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

img

最后祝大家天天进步!!

上面这份完整版的Python全套学习资料已经上传至CSDN官方,朋友如果需要可以直接微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/1016019
推荐阅读
相关标签
  

闽ICP备14008679号