使用Telethon开发Telegram登录代码时遇协程未等待RuntimeWarning问题
问题解决:Telethon登录异步错误修复
你的报错核心是Telethon的核心方法都是异步协程,必须用await关键字调用,加上代码里还有几处拼写错误,导致无法正常运行。下面是具体修复方案:
错误点拆解
self.client.start只是引用了方法,没有实际调用,而且start()是异步方法,必须加awaitis_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
相关产品推荐
相关产品推荐

