使用Telethon 1.23下载联系人头像触发账号被封提示用户已删除/停用求助
问题根因定位
- 你收到的
The user has been deleted/deactivated (caused by GetDialogsRequest)报错触发源为GetDialogsRequest而非download_profile_photo接口本身,说明你的代码逻辑中隐含了拉取全量会话列表的操作,该操作是Telegram反爬策略的高风险触发项 - 短时间内高频拉取会话列表+下载媒体资源的组合请求,会被Telegram服务器判定为异常爬虫行为,你看到的用户删除/停用提示是账号临时限制的伪装提示,并非账号实际被注销
- Telethon v1.23版本存在隐性逻辑缺陷:调用
download_profile_photo时如果未传入明确的用户实体,会自动触发全量GetDialogsRequest匹配对应用户ID,这是触发限制的核心原因
修复方案
- 预获取目标用户实体,避免
download_profile_photo自动触发会话拉取,参考代码:
# 提前通过user_id或username获取目标用户实体 target_user = await client.get_entity(目标用户ID/用户名) await client.download_profile_photo(target_user, file=f"{target_user.id}_avatar.jpg")
- 给下载操作添加随机延迟,避免高频请求,单头像下载间隔设置为3-8秒随机值,参考代码:
import asyncio import random target_user_list = [你的待下载用户ID/用户名列表] for user_item in target_user_list: target_user = await client.get_entity(user_item) await client.download_profile_photo(target_user) # 加入随机延迟降低请求频率 await asyncio.sleep(random.randint(3, 8))
- 若业务确实需要拉取会话列表,给
GetDialogsRequest添加limit参数限制单次拉取数量,单次拉取上限不超过100条,每次拉取间隔不低于5秒
临时限制解除方法
- 触发限制后先停止所有脚本请求,使用官方Telegram客户端正常登录该账号,发送1-2条普通消息给好友,24小时内不调用任何API操作,大部分临时限制会自动解除
内容的提问来源于stack exchange,提问作者Спиннер_Xiao2304
相关产品推荐
相关产品推荐

