You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Telethon正常模式无法授权,调试模式可用且需保存会话

解决Telethon正常模式授权与会话保存问题

核心问题拆解

  • 会话未持久化:StringSession()是内存临时会话,程序结束后自动丢失,无法留存登录状态
  • 密码回显警告:用input()输入密码会明文显示,触发安全警告且存在风险
  • 正常模式授权失败:调试模式可能绕过部分校验,正常模式需严格遵循官方登录流程

解决方案步骤

1. 持久化保存会话

两种常用方案:

  • 文件会话(推荐):用本地文件路径初始化客户端,Telethon自动将会话数据保存到文件,下次启动直接加载
  • StringSession手动持久化:生成会话字符串后写入本地文件,下次启动时读取加载

2. 消除密码回显警告

用Python标准库getpass的getpass()方法替代input()输入密码,该方法会隐藏输入内容,同时消除Telethon的安全警告

3. 修正正常模式授权流程

调整登录逻辑,适配两步验证场景,确保流程符合Telethon官方规范

完整代码示例

方式一:文件会话(推荐)

from telethon import TelegramClient
import getpass

api_id = 你的API_ID
api_hash = '你的API_HASH'
system_version = "4.16.30-vxCUSTOM"

# 用文件路径创建客户端,会话自动保存到my_session.session文件
with TelegramClient('my_session', api_id, api_hash, system_version=system_version) as client:
    phone = input("Enter phone: ")
    code_request = client.send_code_request(phone)
    value = input("Enter login code: ")
    # 安全输入两步验证密码,无明文回显
    password = getpass.getpass("Enter 2-step verification password: ")
    
    try:
        client.sign_in(phone, code=value, phone_code_hash=code_request.phone_code_hash, password=password)
        print("登录成功,会话已自动保存到本地文件")
    except Exception as e:
        print(f"登录失败:{str(e)}")

方式二:StringSession手动持久化

from telethon import TelegramClient, StringSession
import getpass

api_id = 你的API_ID
api_hash = '你的API_HASH'
system_version = "4.16.30-vxCUSTOM"
session_file = 'telegram_session.txt'

try:
    # 尝试读取已保存的会话字符串
    with open(session_file, 'r') as f:
        session_string = f.read().strip()
        client = TelegramClient(StringSession(session_string), api_id, api_hash, system_version=system_version)
        client.start()
        print("已加载保存的会话,无需重新登录")
except (FileNotFoundError, Exception):
    # 首次登录或会话失效,重新授权
    with TelegramClient(StringSession(), api_id, api_hash, system_version=system_version) as client:
        phone = input("Enter phone: ")
        code_request = client.send_code_request(phone)
        value = input("Enter login code: ")
        password = getpass.getpass("Enter 2-step verification password: ")
        
        client.sign_in(phone, code=value, phone_code_hash=code_request.phone_code_hash, password=password)
        # 保存会话字符串到本地文件
        session_string = client.session.save()
        with open(session_file, 'w') as f:
            f.write(session_string)
        print(f"登录成功,会话已保存到{session_file}")

关键说明

  • 文件会话无需手动管理会话数据,Telethon自动完成存储与加载,更稳定易用
  • getpass模块彻底解决密码回显问题,同时规避安全风险
  • 添加异常捕获可以快速定位登录失败原因(如验证码错误、密码错误等)

内容的提问来源于stack exchange,提问作者user11225404

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 15:44:59