首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python-电报-bot在5分钟后停止工作

python-电报-bot在5分钟后停止工作
EN

Stack Overflow用户
提问于 2022-02-07 04:53:49
回答 2查看 779关注 0票数 1

我创建了一个电报机器人,发送浏览器网页的截图。我使用python-selenium包来连接浏览器和电报- bot,但是每次我的bot在5分钟后停止工作,这里是完整的日志。

代码语言:javascript
运行
复制
ERROR:telegram.ext.dispatcher:No error handlers are registered, logging exception.
Traceback (most recent call last):
  File "C:\Users\Evilreborn\AppData\Local\Programs\Python\Python310\lib\site-packages\telegram\vendor\ptb_urllib3\urllib3\connectionpool.py", line 402, in _make_request
    six.raise_from(e, None)
  File "<string>", line 2, in raise_from
  File "C:\Users\Evilreborn\AppData\Local\Programs\Python\Python310\lib\site-packages\telegram\vendor\ptb_urllib3\urllib3\connectionpool.py", line 398, in _make_request
    httplib_response = conn.getresponse()
  File "C:\Users\Evilreborn\AppData\Local\Programs\Python\Python310\lib\http\client.py", line 1374, in getresponse
    response.begin()
  File "C:\Users\Evilreborn\AppData\Local\Programs\Python\Python310\lib\http\client.py", line 318, in begin
    version, status, reason = self._read_status()
  File "C:\Users\Evilreborn\AppData\Local\Programs\Python\Python310\lib\http\client.py", line 279, in _read_status
    line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
  File "C:\Users\Evilreborn\AppData\Local\Programs\Python\Python310\lib\socket.py", line 705, in readinto
    return self._sock.recv_into(b)
  File "C:\Users\Evilreborn\AppData\Local\Programs\Python\Python310\lib\ssl.py", line 1273, in recv_into
    return self.read(nbytes, buffer)
  File "C:\Users\Evilreborn\AppData\Local\Programs\Python\Python310\lib\ssl.py", line 1129, in read
    return self._sslobj.read(len, buffer)
TimeoutError: The read operation timed out

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\Evilreborn\AppData\Local\Programs\Python\Python310\lib\site-packages\telegram\utils\request.py", line 259, in _request_wrapper
    resp = self._con_pool.request(*args, **kwargs)
  File "C:\Users\Evilreborn\AppData\Local\Programs\Python\Python310\lib\site-packages\telegram\vendor\ptb_urllib3\urllib3\request.py", line 68, in request
    return self.request_encode_body(method, url, fields=fields,
  File "C:\Users\Evilreborn\AppData\Local\Programs\Python\Python310\lib\site-packages\telegram\vendor\ptb_urllib3\urllib3\request.py", line 148, in request_encode_body
    return self.urlopen(method, url, **extra_kw)
  File "C:\Users\Evilreborn\AppData\Local\Programs\Python\Python310\lib\site-packages\telegram\vendor\ptb_urllib3\urllib3\poolmanager.py", line 244, in urlopen
    response = conn.urlopen(method, u.request_uri, **kw)
  File "C:\Users\Evilreborn\AppData\Local\Programs\Python\Python310\lib\site-packages\telegram\vendor\ptb_urllib3\urllib3\connectionpool.py", line 665, in urlopen
    retries = retries.increment(method, url, error=e, _pool=self,
  File "C:\Users\Evilreborn\AppData\Local\Programs\Python\Python310\lib\site-packages\telegram\vendor\ptb_urllib3\urllib3\util\retry.py", line 347, in increment
    raise six.reraise(type(error), error, _stacktrace)
  File "C:\Users\Evilreborn\AppData\Local\Programs\Python\Python310\lib\site-packages\telegram\vendor\ptb_urllib3\urllib3\packages\six.py", line 686, in reraise
    raise value
  File "C:\Users\Evilreborn\AppData\Local\Programs\Python\Python310\lib\site-packages\telegram\vendor\ptb_urllib3\urllib3\connectionpool.py", line 614, in urlopen
    httplib_response = self._make_request(conn, method, url,
  File "C:\Users\Evilreborn\AppData\Local\Programs\Python\Python310\lib\site-packages\telegram\vendor\ptb_urllib3\urllib3\connectionpool.py", line 404, in _make_request
    self._raise_timeout(err=e, url=url, timeout_value=read_timeout,
  File "C:\Users\Evilreborn\AppData\Local\Programs\Python\Python310\lib\site-packages\telegram\vendor\ptb_urllib3\urllib3\connectionpool.py", line 321, in _raise_timeout
    raise exc_cls(*args)
telegram.vendor.ptb_urllib3.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='api.telegram.org', port=443): Read timed out. (read timeout=5.0)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\Evilreborn\AppData\Local\Programs\Python\Python310\lib\site-packages\telegram\ext\utils\promise.py", line 96, in run
    self._result = self.pooled_function(*self.args, **self.kwargs)
  File "C:\Users\Evilreborn\Desktop\tmp\test.py", line 53, in status
    context.bot.send_chat_action(
  File "C:\Users\Evilreborn\AppData\Local\Programs\Python\Python310\lib\site-packages\telegram\bot.py", line 130, in decorator
    result = func(*args, **kwargs)
  File "C:\Users\Evilreborn\AppData\Local\Programs\Python\Python310\lib\site-packages\telegram\bot.py", line 2023, in send_chat_action
    result = self._post('sendChatAction', data, timeout=timeout, api_kwargs=api_kwargs)
  File "C:\Users\Evilreborn\AppData\Local\Programs\Python\Python310\lib\site-packages\telegram\bot.py", line 295, in _post
    return self.request.post(
  File "C:\Users\Evilreborn\AppData\Local\Programs\Python\Python310\lib\site-packages\telegram\utils\request.py", line 356, in post
    result = self._request_wrapper(
  File "C:\Users\Evilreborn\AppData\Local\Programs\Python\Python310\lib\site-packages\telegram\utils\request.py", line 261, in _request_wrapper
    raise TimedOut() from error
telegram.error.TimedOut: Timed out

变量USER_ID包含我的userid,这样其他人就不能使用bot了。

我的节目:

代码语言:javascript
运行
复制
from selenium import webdriver
import os
from telegram.ext import Updater
from telegram.ext import CommandHandler
from telegram import ChatAction

BOT_TOKEN = 504XXXXXX:AAGXXXXXXXXXXXXXXXXXXXXXXX
USER_ID = 123456

options = webdriver.ChromeOptions()
browser = webdriver.Chrome(options=options)

updater = Updater(token=BOT_TOKEN, use_context=True)
dp = updater.dispatcher


def status(update, context):
    user = update.message.from_user
    if user["id"] == int(USER_ID):
        browser.save_screenshot("snapshot.png")
        context.bot.send_chat_action(
            chat_id=USER_ID, action=ChatAction.UPLOAD_PHOTO, timeout=100)
        context.bot.send_photo(
            chat_id=USER_ID, photo=open("snapshot.png", "rb"), timeout=100
        )
        os.remove("snapshot.png")
    else:
        update.message.reply_text(
            "You are not authorized to use this bot"
        )


def main():
    browser.get("https://google.com")
    dp.add_handler(CommandHandler("status", status, run_async=True))

    updater.start_polling(timeout=100)
    #updater.idle()


if __name__ == "__main__":
    main()

使用的包:

代码语言:javascript
运行
复制
python_telegram_bot==13.7
selenium==3.141.0

到目前为止我尝试过的是:

  • 我试图增加timeout,但问题仍然存在。
  • 我已经在StackOverflow上浏览过所有先前存在的问题,但没有一个对我有用。
  • 删除了这个if- if user["id"] == int(USER_ID):
  • context.bot.send_chat_action(chat_id=USER_ID, action=ChatAction.UPLOAD_PHOTO, timeout=100)删除了发生错误但仍面临相同问题的行。
  • 互联网连接没有问题。

当我发送"/status“时,机器人会崩溃(从启动到5分钟后)。如果我在不到5分钟的时间内继续发送"/status“,它就会平稳地运行,但是如果没有活动5分钟,它就会开始发送这个错误。

问题不在于互联网的连接。因为我认为这可能是个问题,所以在Azure平台上创建了一个虚拟机/RDP/VPS,并在16‘t的RAM上进行了测试,但仍然没有工作。另外,我也尝试过增加context.bot.send_chat_action的超时,但是它没有起作用。

还有一件事我已经观察到了,在收到这个错误后,如果我发送/status,它会工作(即使在5分钟之后),如果我在5分钟后再次发送,它不会工作,所以它以另一种方式工作,一次它抛出错误,下一次它工作。

我在过去的8天里都有这个问题,如果有人能帮我,请帮忙。

谢谢你把宝贵的时间花在我的问题上,谢谢你

备注:这个问题被转发给了python-telegram-bot 用户组问题跟踪器

EN

Stack Overflow用户

发布于 2022-02-07 07:11:21

您增加了对context.bot.send_photo调用的超时,但跟踪表明对context.bot.send_chat_action的调用发生了超时。如果您经常出现超时问题,我建议您尝试并稳定您的互联网连接。也请看一下处理网络异常上的wiki页面。

免责声明:我目前是python-telegram-bot的维护者

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71013655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档