温馨提示:祝福千万条,真诚第一条,群发不规范,好友小黑屋(群发虽好,可不要贪用哦)
虽然去年整过一次活,并且觉得不应该再来了,但是为了提高新年钟声准点给多人发定制祝福的速度,还是选择继续使用这个方法(规范、优雅且有效hhhh)。
1.效果展示
整体上实现流程如下图(不方便录屏做gif了)
图片1↑
2.改动说明
-
定位取消了现成文本框的定位,因为不需要了
-
直接建立excel表格(xlsx)存储祝福语和联系人相关信息
-
利用pandas读取表格信息,再结合pyperclip复制到剪切板,pyautogui发送出去
-
采用locate.py用于定位,new_group_send.py用于发送消息
3.locate代码说明
核心是创建一个info.txt文件,每隔5秒就读取一个位置(自己运行代码时需要把鼠标移动到你对应的地方),存储位置到info.txt中。
from pyautogui import *
from time import *
# 创建一个文件,用于存储搜索栏和消息栏定位位置,一共8行,一个位置对应2行,分别为x,y
f = open('./info.txt','w')
#要存储的位置文本
strr = ''
#终端信息提示
list = ['wx消息栏','wx搜索栏','qq消息栏','qq搜索栏']
def sleep_remind(i):
print('请将鼠标移动到%s位置,5秒后系统进行记录' %(list[i-1]))
for i in range(5):
print(5-i)
'''表示要休眠多少秒'''
sleep(1)
'''第一行,获取消息栏位置'''
sleep_remind(1)
x,y = position()
strr +=(str(x)+'\n'+str(y)+'\n')
'''第二行,获取搜索栏位置'''
sleep_remind(2)
x,y = position()
strr +=(str(x)+'\n'+str(y)+'\n')
'''第四行,获取qq消息栏的位置,记得把鼠标放在中间偏右,因为打开多个消息栏的位置会变'''
sleep_remind(3)
x,y = position()
strr +=(str(x)+'\n'+str(y)+'\n')
'''第五行,获取qq搜索栏的位置'''
sleep_remind(4)
x,y = position()
strr +=(str(x)+'\n'+str(y)+'\n')
f.write(strr)
4.send代码说明
4.1.重点说明文本复制方法
直接下面模板,先读取出整体data,再使用iloc+py特有分割获取独立数据,pyperclip将单独数据copy,关于具体的行数与execl对应位置见4.2.说明
#读取整个data
whole_text = pd.read_excel(".\\example.xlsx",engine="openpyxl")
#假如需要data的第一列,前三行,这样做
one,two,three = whole_text.iloc[0:3,0]
#再用pyperclip去直接copy就行
pyperclip.copy(one)
4.2.其他补充
在send之前,需要准备两个文件
-
一个是“tk_list.xlsx”,用于存放好友的call(最先说这个是因为这个代表对这位好友的特殊祝福语)、name(备注首拼,比如张三,就是zs,这样可以让微信qq准确定位)、feel(和这位好友的关系程度,我自己设计了从1-3,根据不同程度来给不同级别的通用祝福语)
-
另一个是"text_form.xlsx",用于存放通用祝福语,别看图里这么复杂,文本内容就只有3行,放在第1列(pandas里面是第0列的0-2行,注意看表格有表头)
-
由于群聊过于简单,直接把上图红色部分复制完就可以发了,我这里简单举例说一下针对个人的发送:先把call(特殊祝福语)写入消息栏,(如“我亲爱的张三,祝你”),再看feel是1-3哪个程度,如果是1,那就把祝福语的第一行继续写入消息栏(“在这充满希望的龙年...”)。
最后给一个new_send_group.py的内容
from pyautogui import *
import pyperclip
import pyperclip
import pandas as pd
# 基本数据,把之前存的位置读取出来
locate_ = []
with open("./info.txt","r") as locate_info:
for line in locate_info.readlines():
line = line.strip()
locate_.append(int(line))
# 读取联系人相关信息
thank_list = pd.read_excel(".\\tk_list.xlsx",engine="openpyxl")
print(thank_list.iloc[0,0:3])
# 读取通用祝福语内容
thank_text = pd.read_excel(".\\text_form.xlsx",engine="openpyxl")
one,two,three = thank_text.iloc[0:3,0]
wxhy = 35 #表示已选择的微信好友,下面类同,用的拼音缩写
wxql = 8
qqhy = 1
qqql = 3
def wish(st, ed, search_x, search_y, info_x, info_y, type_):
#search x,y指的是搜索框
#info x,y是发消息的框,传参时给定就行
if type_ == 0:
#意思是单个的好友
for i in range(st, ed):
'''0,1 消息 2,3搜索 4,5qq消息栏 6,7qq搜索栏'''
'''先搜索,移动到搜索栏,点击'''
moveTo(locate_[search_x],locate_[search_y])
mouseDown()
mouseUp()
'''分割出name/feel/call三个内容'''
tmp_name,tmp_feel,tmp_call= thank_list.iloc[i,0:3]
#在搜索框输入姓名简拼
typewrite(message = tmp_name)
sleep(0.5)
press("enter")
#直接输入特殊祝福语
pyperclip.copy(tmp_call)
'''到达对话框发送'''
moveTo(locate_[info_x],locate_[info_y])
mouseDown()
mouseUp()
hotkey('ctrl','v')
# 根据关系程度输入通用祝福语,这个因人而异
if tmp_feel <= 2:
pyperclip.copy(one)
else:
pyperclip.copy(two)
#直接粘贴,发送
hotkey('ctrl','v')
press("enter")
else:
#否则就是群聊
for i in range(st, ed):
'''0,1 消息 2,3搜索 4,5qq消息栏 6,7qq搜索栏'''
'''先搜索'''
moveTo(locate_[search_x],locate_[search_y])
mouseDown()
mouseUp()
#同前,这里只需要群聊名称简拼
tmp_name,tmp_feel,tmp_call= thank_list.iloc[i,0:3]
typewrite(message = tmp_name)
sleep(0.5)
press("enter")
#输入通用祝福语
pyperclip.copy(three)
'''到达对话框发送'''
moveTo(locate_[info_x],locate_[info_y])
mouseDown()
mouseUp()
hotkey('ctrl','v')
press("enter")
wish(0,wxhy,2,3,0,1,0)
wish(wxhy,wxql+wxhy,2,3,0,1,1)
wish(wxql+wxhy,qqhy+wxhy+wxql,6,7,4,5,0)
wish(qqhy+wxhy+wxql,qqhy+wxhy+wxql+qqql,6,7,4,5,1)
今年春晚唠嗑群好玩~但是也困得要死