#萌新日志#4.使用Python定时发送微信消息

        #萌新记录某些日子的学习经历。#

前言:

        因为某些原因我需要用自己私人微信号特定时间给某人发送消息。在网上查阅了一番资料后,我不太打算调用第三方微信接口,原因是我担心这些API的使用会被微信检测到,怕被封号,短时间内我也没有办法找到一个足够安全的第三方微信接口。

        所以这里我采用的方法是pyautogui库来模拟我在某个时间使用电脑发消息的行为。整个环节非常简单。


摘要:

        使用python中pyautogui,pyperclip,time,datatime库,通过模拟鼠标和键盘操作,实现PC端定时自动发送微信消息。

        整个代码流程可以分为:确定时间,打开微信对话框,输入并发送文本。

pyautogui模拟发信息行为

        pyautogui是python版的按键精灵,首先下载这个包

pip install pyautogui

        它可以模拟鼠标点击特定位置、输入英文、敲击键盘等等功能,这里我们根据需求选择特定的函数。

        首先了解两个基本工具:

import pyautogui
pyautogui.size() #返回屏幕的尺寸
x,y = pyautogui.position() #返回当前鼠标所在的位置

        首先要模拟的第一个行为是打开和某个人的对话框。比如我这里直接把想发消息的对话框挂在任务栏了,

         那么我要做的就是,用pyautogui.position()找到点击这个图标可行的一个坐标位置。比如:

time.sleep(5) # 让我有足够的时间运行这段代码后把鼠标移动到图标上
x,y = pyautogui.position()
print(x,y)

        模拟行为中对应的点击操作是:

pyautogui.click(x,y)

        点击后弹出对话框,接下来同样的道理在找到输入文本框的位置,并模拟点击

         接下来输入文本,并敲击'enter'键发送。

        但需要注意的是,如果用pyautogui.typewrite("输入文字消息")这样的方法输入中文字时是无效的,因为pyautogui没办法发送中文

        这里需要另外一个库pyperclip,它可以把汉字保存在剪切板中,和pyautogui组合使用可以在聊天框中输入中文汉字。

import pyperclip

pyperclip.copy("中文信息") # 把汉字信息复制到剪切板中
pyautogui.hotkey('ctrl','v') # 模拟键盘ctrl+v进行粘贴操作
pyautogui.hotkey('enter') # enter发送消息

        至此,基本的发送消息的流程就已经实现了。完整的函数如下:

import time
import pyautogui
import pyperclip

# x,y = pyautogui.position() 不断调用这个函数获得想要的目标位置的坐标

locations = {'wechat':[649,1052], 'screen':[1013,889]} # 记录坐标

# 使用一个msg.txt来保存自己想要发送的消息
f = open("./msg.txt",encoding="utf-8")
msg = [l.strip().strip('\n') for l in f.readlines()]
f.close()


def send_msg():
    time.sleep(1)
    pyautogui.click(locations['wechat'][0],locations['wechat'][1]) # 打开聊天框

    time.sleep(1)
    pyautogui.click(locations['screen'][0],locations['screen'][1]) # 点击文本输入栏 准备输入文字

    for m in msg: # 一行一行发送信息
        time.sleep(1) 
        pyperclip.copy(m)
        pyautogui.hotkey('ctrl','v')
        pyautogui.hotkey('enter')

定时发送

        定时发送需要不断获取当前的系统时间,直到到达我们需要的时间。需要导入另一个库datetime用来获取系统时间。

import datatime

now = datetime.datetime.now() # 获取当前时间
now_str = now.strftime('%H%M%S') # 提取当前时间的部分信息以str形式保存

now_str
>>> 170434 

          根据自己的需求设置strftime()的内容,我这里%H%M%S分别表示当前的"时分秒"。只要now_str到达了自己想要发送信息的时间点,就可以执行信息发送的函数了。那么在上文的基础上增加一个循环。

import time
import pyautogui
import pyperclip

# x,y = pyautogui.position() 不断调用这个函数获得想要的目标位置的坐标

locations = {'wechat':[649,1052], 'screen':[1013,889]} # 记录坐标

# 使用一个msg.txt来保存自己想要发送的消息
f = open("./msg.txt",encoding="utf-8")
msg = [l.strip().strip('\n') for l in f.readlines()]
f.close()


def send_msg():
    time.sleep(1)
    pyautogui.click(locations['wechat'][0],locations['wechat'][1]) # 打开聊天框

    time.sleep(1)
    pyautogui.click(locations['screen'][0],locations['screen'][1]) # 点击文本输入栏 准备输入文字

    for m in msg: # 一行一行发送信息
        time.sleep(1) 
        pyperclip.copy(m)
        pyautogui.hotkey('ctrl','v')
        pyautogui.hotkey('enter')

# 比如我想在 PM 17:11:00 发送消息
send_time = '171100' # 根据自己的需求确定想要发送的时间 可以再加上年月日之类的
while True:
    time.sleep(1) 
    now = datetime.datetime.now()
    now_str = now.strftime('%H%M%S')
    if send_time == now_str: # 到达想要发送的时间了
        #unlock()
        send_msg()
        break
print('success')

         发送成功如下:

 

总结:

        虽然从代码上实现是挺简单的,但用pyautogui库模拟发送微信这个行为多少有点无奈了。并且有很大的局限性和固定性。比如我必须保证电脑没有被锁住,因为我试了下pyautogui是没办法输入win10锁屏密码的。我还得保证图标在任务栏位置、消息窗口位置不变化。另外pyautogui也可以用别的键盘精灵库代替。

        特殊情况还是能用,但想要大规模标准化批量化发送消息可能还是要想别的方法。如果有好用的不会被封号的接口请安利给我。

        感谢您阅读到这里。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值