当前位置:首页>python>【有趣的python项目】(二)微信自动抢红包

【有趣的python项目】(二)微信自动抢红包

  • 2026-09-06 00:56:04
【有趣的python项目】(二)微信自动抢红包
本篇要介绍的微信自动抢红包不是对微信的破解(不要轻易利用网络上的工具破解微信,容易封号),是在电脑端对微信红包进行图像识别(这里用到的是模板匹配),然后驱动鼠标自动点击。主要使用的第三方库是pyautogui。
当然微信PC版没有红包功能,所以只能使用安卓模拟器或者手机投屏。
这个脚本主要学习模板匹配原理以及pyautogui的自动化基础方法,大家完全可以举一反三,使用模板匹配去识别任意模板,从而实现更多PC端自动化场景。
首先简要说明一下模板匹配:

模板匹配是一种基础的图像识别方法,可以理解为用一张小图(模板),在大图里找到最像它的位置。实际上使用的是滑动比对,把小图当作模板,从大图的左上角开始,一步一步地往右下角移动,每到一个位置,就计算这个小图和它覆盖住的那块大图区域的相似度。

自动抢红包:
脑子灵活的小伙伴已经猜到了,利用模板匹配的原理,把红包的图标截取出来作为模板(小图),然后实时监测微信聊天界面,不断循环模板匹配,一旦匹配到模板(可设置置信度),则驱动鼠标点击。不过要注意几点:1.模板匹配不抗旋转和缩放,也就是模板必须是从当前画面中截取的,如果你改变了电脑分辨率,旧的模板很可能失效;2.微信红包点击后还有后续动作点击”开“,才算抢到,抢到之后鼠标还要点击,并且要计算好第二次点击的位置。另外还要应付没抢到的情况。
以下是代码参考:
import pyautoguiimport timeimport random# 初始化设置pyautogui.PAUSE = 0.15pyautogui.FAILSAFE = Truepyautogui.CONFIDENCE = 0.7def locate_img(img_path):    """定位图片,返回中心坐标或None"""    try:        return pyautogui.locateCenterOnScreen(img_path)    except:        return Nonedef rand_offset():    """生成随机偏移量"""    return random.randint(-20, 20), random.randint(-20, 20)# 启动校验if input().strip() != 's':    exit()flag = Falsewhile True:    # 检测红包并点击    red_pkt = locate_img("IMAGES/0.png")    if red_pkt and not flag:        x, y = rand_offset()        pyautogui.click(red_pkt[0]+x, red_pkt[1]+y)        flag = True    # 检测开红包按钮    open_btn = locate_img("IMAGES/3.png")    if open_btn:        flag = False        x, y = rand_offset()        pyautogui.click(open_btn[0]+x, open_btn[1]+y)        time.sleep(3)        pyautogui.press('esc')        time.sleep(2)    # 检测手慢了提示    missed = locate_img("IMAGES/man.png")    if missed:        flag = False        pyautogui.press('esc')    time.sleep(0.1)
这是需要提前截取好的三张模板:
顺便贴一些pyautogui的其他常用函数:
#常用函数:# 移动鼠标pyautogui.moveTo(200,400,duration=2)pyautogui.moveRel(200,500,duration=2)#第一行是将鼠标移动到指定的像素(200,400)位置,第二行代码是将鼠标按照当前点向右移动200px,向下移动400px这个方向移动。正表示右下负表示左上print(pyautogui.position())   # 得到当前鼠标位置;输出:Point(x=200, y=800)# 点击鼠标pyautogui.click(10,10)   # 鼠标点击指定位置,默认左键pyautogui.click(10,10,button='left')  # 单击左键pyautogui.click(1000,300,button='right')  # 单击右键pyautogui.click(1000,300,button='middle')  # 单击中间pyautogui.doubleClick(10,10)  # 指定位置,双击左键pyautogui.rightClick(10,10)   # 指定位置,双击右键pyautogui.middleClick(10,10)  # 指定位置,双击中键#拖动到指定位置pyautogui.dragTo(100,300,duration=1)#将鼠标拖动到指定的坐标;duration 的作用是设置移动时间,所有的gui函数都有这个参数,而且都是可选参数;#按方向拖动pyautogui.dragRel(100,500,duration=4)   # 第一个参数是左右移动像素值,第二个是上下,#向右拖动100px,向下拖动500px, 这个过程持续 1 秒钟;pyautogui.scroll(300)  # 向上滚动300个单位;#屏幕截图im = pyautogui.screenshot()im.save('Screenshots/屏幕截图.png')#屏幕识别import pyautoguipyautogui.PAUSE = 1# 图像识别(一个)btm = pyautogui.locateOnScreen('zan.png')print(btm)  # Box(left=1280, top=344, width=22, height=22)# 图像识别(多个)btm = pyautogui.locateAllOnScreen('zan.png')print(list(btm))  # [Box(left=1280, top=344, width=22, height=22), Box(left=25, top=594, width=22, height=22)]#直接获得中心坐标x, y = pyautogui.locateCenterOnScreen('IMAGES/已领取.png')pyautogui.click(x, y)#键盘输出keyDown():模拟按键按下keyUP():模拟按键松开press():模拟一次按键过程,即 keyDown 和 keyUP 的组合typewrite():模拟键盘输出内容#eg:pyautogui.keyDown('shift')pyautogui.press('1')pyautogui.keyUp('shift')#运行上面的代码,如果你的鼠标是放在编辑框中,你会得到一个感叹号pyautogui.typewrite('python', 1)#第一个参数是输出的内容,第二个参数是间隔时间,单位是秒。#运行上面代码,你的编辑器里面就会每隔1秒钟按顺序输出 python 的6个字母。pyautogui.typewrite(['p','y','t','h','o','n','enter'])运行上面代码,编辑器里面就会输出 python 之后换行。pyautogui.hotkey('ctrl','c')#和pyautogui.keyDown('ctrl')pyautogui.keyDown('c')pyautogui.keyUp('c')pyautogui.keyUp('ctrl')# 相同#屏幕截图img = pyautogui.screenshot()region = (300,400,606,500)img = pyautogui.screenshot(region=region)#这可以指定区域

最新文章

随机文章