已实现Messenger登录,如何用Python requests库给Instagram用户批量发消息
实现登录Messenger后向Instagram用户批量发消息(requests版)
核心前提
确保你的登录代码已通过requests.Session()维持有效会话(保存了登录后的Cookie和验证Token)。Instagram用户在Messenger中属于跨平台联系人,必须先获取其对应的**线程ID(thread ID)**才能发送消息。
具体实现步骤
1. 读取本地目标用户列表
假设你的target_users.txt文件每行一个Instagram用户名,先读取为列表:
def load_target_users(file_path): with open(file_path, 'r', encoding='utf-8') as f: return [line.strip() for line in f if line.strip()] target_users = load_target_users('target_users.txt')
2. 获取Instagram用户的Messenger线程ID
调用Messenger的搜索接口,根据用户名查找对应线程。需从登录后的页面源码中提取x-fb-lsd、x-fb-xs、queryHash等验证参数:
def get_instagram_thread_id(session, username): # 从已登录会话的Cookie或页面源码中提取以下参数 lsd_token = session.cookies.get('lsd') xs_token = session.cookies.get('xs') # queryHash需从浏览器开发者工具抓取真实搜索接口的哈希值(Facebook更新可能变化) query_hash = "你的queryHash" search_url = "https://www.messenger.com/api/graphqlbatch/" payload = { "queries": f'[{"operationName":"SearchUserQuery","variables":{"query":"{username}","limit":10,"filters":{"contact_point":"instagram"},"scale":2},"queryHash":"{query_hash}"}]' } headers = { 'Content-Type': 'application/x-www-form-urlencoded', 'X-FB-LSD': lsd_token, 'X-FB-XS': xs_token, 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' } response = session.post(search_url, data=payload, headers=headers) data = response.json() # 解析返回结果提取线程ID for item in data[0]['data']['search']['edges']: if item['node']['username'] == username: return item['node']['thread']['id'] return None
3. 发送消息到指定线程
拿到线程ID后,构造发送消息的POST请求:
def send_message_to_thread(session, thread_id, message): lsd_token = session.cookies.get('lsd') xs_token = session.cookies.get('xs') fb_dtsg = session.cookies.get('fb_dtsg') # 从页面源码提取该参数 send_url = "https://www.messenger.com/messaging/send/" payload = { "client": "web_messenger", "action_type": "ma-type:user-generated-message", "thread_id": thread_id, "text": message, "fb_dtsg": fb_dtsg, "lsd": lsd_token } headers = { 'X-FB-XS': xs_token, 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' } response = session.post(send_url, data=payload, headers=headers) return response.status_code == 200
4. 整合流程按顺序发送
# 假设你的登录函数已初始化会话:logged_in_session = your_login_function() message_content = "你好,这是来自Python脚本的测试消息" for username in target_users: thread_id = get_instagram_thread_id(logged_in_session, username) if not thread_id: print(f"未找到用户 {username} 的线程ID") continue success = send_message_to_thread(logged_in_session, thread_id, message_content) print(f"向 {username} 发送消息{'成功' if success else '失败'}") # 控制请求频率,避免触发反爬机制 import time time.sleep(5)
重要注意事项
- 动态获取验证参数:
lsd、xs、fb_dtsg、queryHash不能硬编码,必须从登录后的页面或接口响应中提取,否则请求会被拦截。 - 频率控制:必须添加延迟(5-10秒),否则账号可能被临时封禁或限制。
- 合规风险:批量发送消息可能违反Facebook服务条款,建议用测试账号调试,避免主账号受限。
内容的提问来源于stack exchange,提问作者Hulusi
相关产品推荐
相关产品推荐

