Python实现发送QQ消息:基于WebQQ协议的自动化脚本教程
引言
在信息化时代,即时通讯工具已经成为我们日常生活中不可或缺的一部分。QQ作为国内最流行的即时通讯软件之一,拥有庞大的用户群体。在某些场景下,我们可能需要通过程序自动发送QQ消息,比如提醒通知、自动化运维等。本文将详细介绍如何使用Python基于WebQQ协议实现发送QQ消息的自动化脚本。
前提条件
- Python环境:确保你的电脑上已经安装了Python环境,建议使用Python 3.x版本。
- 第三方库:需要安装一些第三方库,如
requests
、BeautifulSoup
等。
安装必要的库
首先,我们需要安装一些必要的Python库。打开终端或命令提示符,执行以下命令:
pip install requests beautifulsoup4
WebQQ协议简介
WebQQ是腾讯公司推出的一种基于网页的QQ登录方式,用户可以通过网页与好友进行聊天。虽然WebQQ已经不再维护,但其协议仍然可以用于自动化脚本的开发。
实现步骤
- 模拟登录:首先需要模拟用户登录WebQQ。
- 获取好友列表:登录成功后,获取好友列表。
- 发送消息:根据好友ID发送消息。
1. 模拟登录
模拟登录是整个流程中最复杂的一步,需要处理登录表单、验证码等问题。
import requests
from bs4 import BeautifulSoup
def get_login_params():
url = 'https://xui.ptlogin2.qq.com/cgi-bin/xlogin'
params = {
'appid': '716027609',
'daid': '383',
'style': '33',
'login_text': '登录',
'hide_title_bar': '1',
'hide_border': '1',
'target': 'self',
's_url': 'https://qzone.qq.com/',
'pt_3rd_aid': '0',
'pt_feedback_link': 'https://support.qq.com/products/77942?customInfo=.appid.716027609',
}
response = requests.get(url, params=params)
soup = BeautifulSoup(response.text, 'html.parser')
return {
'ptvfsession': soup.find('input', {'name': 'ptvfsession'})['value'],
'uin': soup.find('input', {'name': 'uin'})['value'],
'appid': soup.find('input', {'name': 'appid'})['value'],
'js_type': soup.find('input', {'name': 'js_type'})['value'],
'js_ver': soup.find('input', {'name': 'js_ver'})['value'],
'login_sig': soup.find('input', {'name': 'login_sig'})['value'],
'pt_randsalt': soup.find('input', {'name': 'pt_randsalt'})['value'],
'ptredirect': soup.find('input', {'name': 'ptredirect'})['value'],
'u1': soup.find('input', {'name': 'u1'})['value'],
'verifycode': '',
}
def login(username, password):
login_params = get_login_params()
login_params['uin'] = username
login_params['p'] = password
login_url = 'https://ptlogin2.qq.com/login'
response = requests.post(login_url, data=login_params)
if '登录成功' in response.text:
print('登录成功')
else:
print('登录失败')
username = 'your_qq_number'
password = 'your_qq_password'
login(username, password)
2. 获取好友列表
登录成功后,我们需要获取好友列表,以便后续发送消息。
def get_friend_list():
url = 'https://s.web2.qq.com/api/get_user_friends2'
headers = {
'Referer': 'https://s.web2.qq.com/cgi-bin/mmwebwx-bin/webwxinit?r=1377194604',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
}
response = requests.get(url, headers=headers)
friends = response.json()['result']['friends']
return friends
friends = get_friend_list()
for friend in friends:
print(f'好友ID: {friend["uin"]}, 昵称: {friend["nick"]}')
3. 发送消息
最后一步是发送消息给指定好友。
def send_message(to_uin, message):
url = 'https://d1.web2.qq.com/channel/send_buddy_msg2'
headers = {
'Referer': 'https://d1.web2.qq.com/cfproxy.html?v=20151105001&callback=1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
}
data = {
'to': to_uin,
'content': f'[\"{message}\",\"\\n\"]',
'face': 522,
'clientid': 53999199,
'msg_id': 658899,
'psessionid': '8368046764001d636f6e6e7365727665725f77656271714031302e3133392e372e3136300000354d00000066b026e040015808a206d0000000a406d00000028',
}
response = requests.post(url, headers=headers, data=data)
if response.json()['errCode'] == 0:
print('消息发送成功')
else:
print('消息发送失败')
to_uin = 'friend_uin'
message = 'Hello, this is a test message!'
send_message(to_uin, message)
总结
通过以上步骤,我们成功实现了使用Python基于WebQQ协议发送QQ消息的自动化脚本。虽然WebQQ已经不再维护,但其协议仍然可以用于一些简单的自动化任务。需要注意的是,腾讯官方对自动化登录和消息发送有一定的限制,因此在实际使用中可能会遇到一些问题,需要根据实际情况进行调整。