Fork me on GitHub

py使用itchat发送微信消息

环境:Windows、python3.6、itchat库
代码参考于奇幻果园
itchat使用需要事先下载安装,命令如下: pip install itchat
这个代码的作用就是在指定时间给微信好友发送信息,并且可以间隔特定时间再次发送,类似于短信轰炸?学习!嗯,用来学习。

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
28
29
30
31
#!usr/bin/python
# -*- coding: UTF-8 -*-
import itchat
import datetime, os, platform,time
def timerfun(sched_time) :
flag = 0
while True:
now = datetime.datetime.now()
if now > sched_time and now < sched_time + datetime.timedelta(seconds=1) : #因为时间秒之后的小数数据部分不一定相等,要标记一个范围判断
send_move()
time.sleep(2) #每次判断间隔2s, 避免多次触发事件
flag = 1
else :
if flag == 1 :
sched_time = sched_time + datetime.timedelta(hours=24) #把目标时间增加一个小时,24小时后触发再次执行
flag = 0
def send_move():
users= itchat.search_friends(name= 'Love') #使用备注名来查找实际用户名
print(users) #获取好友全部信息,返回一个列表,列表内是一个字典
userName= users[0]['UserName'] #获取UserName,用来发送消息
itchat.send("It's time to take a rest. 宝贝, 该睡觉啦!", toUserName= userName)
print('succeed')
if __name__=='__main__':
itchat.auto_login(hotReload=True) #首次扫描登录后后续自动登录
sched_time = datetime.datetime(2018,3,25,23,40,00) #设定初次触发时间的事件点
print('run the timer task at {0}'.format(sched_time))
timerfun(sched_time)

有些地方需要注意下:
1、第11行判断时间是否到达指定时间处,因为now = datetime.datetime.now()返回的时间精确到了ms, 所以直接拿精确到s的特定时间去比较会出现False。所以改用判断时间是否在范围内。并且判断完后会用time.sleep(2)延时2s再次比较,避免多次命中或多次判断。
2、第17行内,每次时间判断满足指定时间范围时,将指定时间往后延一定时间。这里+ datetime.timedelta(hours=24)表示延后24小时,达到每过24小时触发一次send_move函数的目的。
3、第28行内,itchat.auto_login(hotReload=True)如注释说明的一样,避免每次都要扫描二维码登录,在登录一次之后”保持在线状态”
4、第27行,if __name__=='__main__':表示当前模块仅在自己运行时才运行后续的语句,否则当该模块被其他模块引用时,不会运行后续语句。每个模块都有__name__属性,当它等于__main__时,表示该模块被用户单独运行,可以执行特殊的操作。
5、第30行,注意一下这里的print函数对sched_time字符串的使用方式。为了按照一般时间格式打印输出,对sched_time进行了format格式化处理,我理解就是保持sched_time原本的时间形式不变,而按照字符串的方法进行处理。这里用{0}来表示格式化后的sched_time,让其能够以原来时间格式与前面待打印的字符串进行字符串拼接。

Your support will encourage me to continue to create!