如何使用Telethon无需输入手机号或机器人令牌连接Telegram,并避免新设备验证?
解决Telethon脚本新设备运行需验证码的问题
嘿,这个问题我之前也碰到过,其实核心原因是你当前用的是普通用户账号的session授权机制,每次新设备没有已生成的session文件时,Telegram就会要求验证身份。下面给你两个靠谱的解决方案:
方案1:复用已授权的Session文件(最简单直接)
当你第一次在某台设备上运行脚本并完成验证码验证后,Telethon会在脚本目录下生成一个名为anon.session的文件——这个文件就是你的登录会话凭据,包含了已授权的信息。
只要把这个anon.session文件复制到新设备的脚本同一目录下,再运行脚本时就会直接读取已有的会话,不需要再输入验证码了!
⚠️ 注意:这个session文件相当于你的账号登录凭证,一定要妥善保管,绝对不能泄露给其他人,否则别人可以直接登录你的Telegram账号。
方案2:改用机器人账号(更适合长期自动化运行)
如果你的脚本是用来长期监听频道的,用机器人账号会更省心——机器人通过Token授权,完全不需要验证码,而且没有设备绑定的问题。
步骤如下:
- 打开Telegram,搜索
@BotFather,按照提示创建一个新机器人,拿到机器人的token(格式类似123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11) - 修改你的脚本,把客户端初始化部分改成机器人模式:
import configparser from telethon.errors import SessionPasswordNeededError from telethon import TelegramClient, events, sync from telethon.tl.functions.messages import (GetHistoryRequest) from telethon.tl.types import ( PeerChannel ) api_id = 'xxxxxx' api_hash = 'xxxxxxxxxxxxxxxxxxxxxxx' bot_token = '你的机器人token' # 新增机器人token # 在此定义你要监听的目标频道: input_channels = ('https://t.me/xxxxxx','https://t.me/xxxx','https://t.me/xxxxxxx') print(input_channels) # 创建机器人客户端 client = TelegramClient('bot_session', api_id, api_hash).start(bot_token=bot_token) # 监听目标频道的消息 @client.on(events.NewMessage(chats=input_channels)) async def newMessageListener(event): # 获取消息文本 newMessage = event.message.message print(newMessage) with client: client.run_until_disconnected()
⚠️ 注意:机器人账号的局限性:
- 只能监听公开频道,或者被频道管理员邀请加入的私有频道
- 无法获取频道的历史消息(如果你的脚本需要历史数据,方案1更合适)
内容的提问来源于stack exchange,提问作者Stamatis Tiniakos




