闲来无事想做做自动化了,发现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()