pyautogui实战--自动给好友群发文本消息、图片消息

闲来无事想做做自动化了,发现csdn平台没有多少关于pyautogui实战的教程,就把我今天做实战的项目分享一下,也可以做个备份

代码打包:

链接:https://pan.baidu.com/s/1E5HQw34YCS8wvdQzpEi_8g
提取码:75fd

背景:想要用pyautogui操作pc端的微信群发消息

思路:pyautogui可以根据提供的图片判断这张图片是否存在于当前界面,存在的话,返回图片中心位置坐标,然后用pyautogui模拟鼠标点击就能实现我们的简单需求了

框架:

  • 1

定义一个函数,能够根据提供的图标,找到图标中心坐标,并点击的功能,

  • 2

还要一个根据好友id打开与好友对话框的函数,

  • 3

再实现发送内容的获取及发送,

  • 4

定义一个主函数实现调用

环境配置:

pip install pyautogui
pip install pyperclip

pc端的微信

开始了
我们先来导入库

import time
import pyautogui as pg
import pyperclip #模拟剪切板,读取文件然后放在剪切板中

然后定义一个函数,它可以根据我们提供的图标,定位图标中心点位置,然后模拟鼠标点击它

# 定义一个根据图标寻找像素位置并点击的函数
    def mapping_img(self,img, click):
        # 读入图片数据,返回图片中心点坐标
        box_location = pg.locateCenterOnScreen(img)
        # 将鼠标移动到中心点位置
        pg.moveTo(box_location)
        if click == 'double':
            pg.doubleClick()
        else:
            pg.leftClick(box_location)

我们还需要一个根据好友id打开与好友的对话框的函数

 # 根据提供的好友名称找到好友对话框
    def chat_user(self,user):
        if user != '':
            self.mapping_img('search.png', 'single')
            # 直接复制,避免输入时无法输入中文的问题
            pyperclip.copy(user)
            pg.hotkey('ctrl', 'v')
            pg.moveRel(xOffset=0, yOffset=80)  # 移动像素是测算好的
            pg.click()
        else:
            self.mapping_img('me.png', 'single')
            pg.moveRel(xOffset=316, yOffset=238)  # 移动像素是测算好的
            pg.click()

现在我们来定义要发送内容的获取函数

# 读入需要发送的文本内容,复制粘贴到对话框
    def read_txt(self):
        hellofile = open(self.txt, "r", encoding="UTF-8")
        content = hellofile.read()
        pyperclip.copy(content)
        pg.hotkey('ctrl', 'v')
        hellofile.close()
    # 选择需要发送的图片,请放在指定文件夹,命名时避免中文名,opencv处理时会报错
    def read_img(self):
        # 找到微信对话框的文件发送图标
        self.mapping_img('file.png', 'single')
        # 移动到图标上
        pg.moveTo(83, 284)
        pg.click()
        # 移动到图片文件夹的图标上
        pg.moveTo(429, 519)
        pg.click()
        # 把传入的图片文件名复制,粘贴在文件名选框
        pyperclip.copy(self.img_name)
        pg.hotkey('ctrl', 'v')
        pg.hotkey('enter')

效果视频展示

就你了

完整代码:

import time
import pyautogui as pg
import pyperclip #模拟剪切板,读取文件然后放在剪切板中
# 使用前需配置的环境,没有可自行安装
# pip install pyautogui
# pip install pyperclip

class WeChat:
    '''
    这是一个自动给好友发送消息的类,可以自动给多个好友发送文本、图片消息,解放双手
    使用前需要打开pc端的微信,状态是登录好的,主页面,点击执行之后程序会在六秒之后执行,使用者把电脑界面切换到微信界面即可
    把要发送的图片放在系统自带的‘图片’文件夹,文件命名避免中文名,不然会报错
    '''
    # 初始化
    def __init__(self,user_name,txt=None,img_name=None):
        self.user_name = user_name
        self.txt = txt
        self.img_name = img_name
        # 完成一步操作等待0.5秒
        pg.PAUSE = 0.5

    # 定义一个根据图标寻找像素位置并点击的函数
    def mapping_img(self,img, click):
        # 读入图片数据,返回图片中心点坐标
        box_location = pg.locateCenterOnScreen(img)
        # 将鼠标移动到中心点位置
        pg.moveTo(box_location)
        if click == 'double':
            pg.doubleClick()
        else:
            pg.leftClick(box_location)
    # 根据提供的好友名称找到好友对话框
    def chat_user(self,user):
        if user != '':
            self.mapping_img('search.png', 'single')
            # 直接复制,避免输入时无法输入中文的问题
            pyperclip.copy(user)
            pg.hotkey('ctrl', 'v')
            pg.moveRel(xOffset=0, yOffset=80)  # 移动像素是测算好的
            pg.click()
        else:
            self.mapping_img('me.png', 'single')
            pg.moveRel(xOffset=316, yOffset=238)  # 移动像素是测算好的
            pg.click()
    # 读入需要发送的文本内容,复制粘贴到对话框
    def read_txt(self):
        hellofile = open(self.txt, "r", encoding="UTF-8")
        content = hellofile.read()
        pyperclip.copy(content)
        pg.hotkey('ctrl', 'v')
        hellofile.close()
    # 选择需要发送的图片,请放在指定文件夹,命名时避免中文名,opencv处理时会报错
    def read_img(self):
        # 找到微信对话框的文件发送图标
        self.mapping_img('file.png', 'single')
        # 移动到图标上
        pg.moveTo(83, 284)
        pg.click()
        # 移动到图片文件夹的图标上
        pg.moveTo(429, 519)
        pg.click()
        # 把传入的图片文件名复制,粘贴在文件名选框
        pyperclip.copy(self.img_name)
        pg.hotkey('ctrl', 'v')
        pg.hotkey('enter')
    # 图片文件夹位置在微信对话框最大的时候,位置是固定的,方便我们定位它
    def max_size(self):
        point = pg.locateCenterOnScreen('max.png')
        if point:
            pg.moveTo(point)
            pg.click()
        else:
            pass

    def main(self):
        self.max_size()
        # 做一个判断,这样我们就能在做到只发文本或只发图片,或两个都发
        if self.txt == None and self.img_name != None:
            for user in self.user_name:
                self.chat_user(user)  # 不写默认是自己
                # 发送照片
                self.read_img()
                # time.sleep(1)
                pg.hotkey('enter')
                print('{}消息已发送'.format(user))
        elif self.txt != None and self.img_name == None:
            for user in self.user_name:
                self.chat_user(user)  # 不写默认是自己
                # 发送语句1
                self.read_txt()
                pg.press('enter')
                print('{}消息已发送'.format(user))
        elif self.txt == None and self.img_name == None:
            print('请提供需要发送的文本和图片的文件名!!!')
        else:
            for user in self.user_name:
                self.chat_user(user)  # 不写默认是自己
                # 发送语句1
                self.read_txt()
                pg.press('enter')
                # 发送照片
                self.read_img()
                # time.sleep(1)
                pg.hotkey('enter')
                print('{}消息已发送'.format(user))


if __name__ == '__main__':
    time.sleep(6)
    print('程序开始执行,请在6秒内把界面切换到pc端微信界面')
    # WeChat(['User_name'],txt_name,img_name)
    # 当需要上传多张图片时,只需在微信发送文件弹出的对话框中多选,然后复制文件名选框中的文件名即可
    we = WeChat(['y17573053136','文件传输助手'],'a.txt','"3.jpg" "1.jpg" "2.jpg" ')
    we.main()
  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值