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

使用Telethon开发Telegram登录代码时遇协程未等待RuntimeWarning问题

问题解决:Telethon登录异步错误修复

你的报错核心是Telethon的核心方法都是异步协程,必须用await关键字调用,加上代码里还有几处拼写错误,导致无法正常运行。下面是具体修复方案:

错误点拆解

  • self.client.start 只是引用了方法,没有实际调用,而且start()是异步方法,必须加await
  • is_user_authorized()是异步方法,判断登录状态时没加await
  • 方法名拼写错误:send_code_requests → send_code_request,sing_in → sign_in,这两个也是异步方法,需要加await
  • 整个登录流程需要在异步环境中执行,普通方法无法直接调用异步函数,要把connect改成异步方法,主函数用异步方式启动

修正后的代码

from telethon import TelegramClient, events
import asyncio

class Scarping:
    def __init__(self):
        self.api_id = "你的api_id"  # 替换成实际的api_id
        self.api_hash = "你的api_hash"  # 原代码变量名写错,应为api_hash而非api_has
        self.phone = "你的手机号"
        self.name = "session_name"

        self.client = TelegramClient(self.name, self.api_id, self.api_hash)

        self.groups = []

    async def connect(self):
        # 调用异步start方法,必须加await
        await self.client.start()
        # 异步方法需用await获取结果
        if not await self.client.is_user_authorized():
            # 修正方法名并加await
            await self.client.send_code_request(self.phone)
            code = int(input("请输入验证码:"))
            # 修正方法名并加await
            await self.client.sign_in(self.phone, code)

if __name__ == "__main__":
    # 用asyncio.run运行异步函数
    telegram = Scarping()
    asyncio.run(telegram.connect())

额外注意

  • 确保api_id和api_hash是从Telegram开发者平台获取的有效值
  • 如果账号开启了两步验证,登录时还需要输入密码,可在代码中添加对应逻辑处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:25:22