下载地址:www.pan38.com/dow/share.p… 提取密码:1281
这是一个完整的微博私信群发工具实现,包含登录、获取粉丝列表、发送私信和批量发送功能。使用时需要替换配置信息中的用户名、密码和目标用户UID。代码实现了随机消息选择、请求延迟等功能,避免被微博检测为异常行为。
import requests import json import time import random from bs4 import BeautifulSoup
class WeiboDMBot: def init(self, username, password): self.session = requests.Session() self.headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' } self.username = username self.password = password self.login_url = 'passport.weibo.cn/sso/login' self.dm_url = 'm.weibo.cn/api/chat/se…' self.followers_url = 'm.weibo.cn/api/contain…' self.base_url = 'm.weibo.cn/'
def login(self):
login_data = {
'username': self.username,
'password': self.password,
'savestate': '1',
'r': 'https://m.weibo.cn/',
'ec': '0',
'pagerefer': '',
'entry': 'mweibo',
'wentry': '',
'loginfrom': '',
'client_id': '',
'code': '',
'qq': '',
'mainpageflag': '1',
'hff': '',
'hfp': ''
}
try:
response = self.session.post(self.login_url, data=login_data, headers=self.headers)
if response.status_code == 200:
result = response.json()
if result.get('retcode') == 20000000:
print("登录成功")
return True
print("登录失败")
return False
except Exception as e:
print(f"登录异常: {e}")
return False
def get_followers(self, uid, page=1):
try:
url = self.followers_url.format(uid=uid) + f"&page={page}"
response = self.session.get(url, headers=self.headers)
if response.status_code == 200:
data = response.json()
followers = data.get('data', {}).get('cards', [])
follower_list = []
for card in followers:
if card.get('card_type') == 11:
users = card.get('user', [])
for user in users:
follower_list.append({
'id': user.get('id'),
'name': user.get('screen_name')
})
return follower_list
return []
except Exception as e:
print(f"获取粉丝列表异常: {e}")
return []
def send_dm(self, uid, message):
try:
data = {
'content': message,
'uid': uid
}
response = self.session.post(self.dm_url, data=data, headers=self.headers)
if response.status_code == 200:
result = response.json()
if result.get('ok') == 1:
print(f"发送私信给 {uid} 成功")
return True
print(f"发送私信给 {uid} 失败")
return False
except Exception as e:
print(f"发送私信异常: {e}")
return False
def batch_send_dm(self, uid_list, messages, delay=5):
success_count = 0
for uid in uid_list:
message = random.choice(messages)
if self.send_dm(uid, message):
success_count += 1
time.sleep(delay + random.uniform(0, 2))
print(f"批量发送完成,成功发送 {success_count}/{len(uid_list)} 条")
def run(self, target_uid, messages, pages=5, delay=5):
if not self.login():
return
followers = []
for page in range(1, pages+1):
page_followers = self.get_followers(target_uid, page)
followers.extend(page_followers)
time.sleep(2)
if not followers:
print("没有获取到粉丝列表")
return
uid_list = [f['id'] for f in followers]
self.batch_send_dm(uid_list, messages, delay)
if name == "main": # 配置信息 USERNAME = "your_weibo_username" PASSWORD = "your_weibo_password" TARGET_UID = "123456789" # 目标用户UID MESSAGES = [ "你好,很高兴认识你!", "欢迎关注我的微博~", "期待与你交流!", "感谢你的关注!", "这是我的最新动态,欢迎查看!" ]
bot = WeiboDMBot(USERNAME, PASSWORD)
bot.run(TARGET_UID, MESSAGES, pages=3, delay=10)