Суть проблемы - занимаюсь ботом телеграм, который по запросу пользователя выводит некий курс валюты, который парсится с сайта. Первоначальный фрагмент кода с парсером, который в дальнейшем срабатывает на команды и колбэки, выглядит следующим образом:
def get_value(coeff):
driver = webdriver.Chrome()
driver.get('https://bcs-express.ru/kotirovki-i-grafiki/eur_rub__tod')
element = driver.find_element(by=By.CSS_SELECTOR, value="div.Here.EWHp.Dlhk")
curreu = str(round(float(element.text.replace(',', '.'))*coeff, 2))
fin = "человек выдаст наличные евро, с вас перевод на карту сбербанка или другого российского банка. Курс обмена евро - " + curreu + " руб.\n" + "\n" + "Возможен обмен в обратную сторону. Курс уточняйте.\n" + "\n" + "Покупаем криптовалюту. Курс уточняйте."
driver.quit()
return fin
print(get_value(coeff))
В данном случае код работает без ошибок, но каждый запрос обрабатывался довольно медленно, так как при каждом запросе парсер брал значение, открывая страницу через веб-драйвер, поэтому я решил сделать срабатывание парсера раз в 10 минут, а в сообщении выводить переменную, в которое записывается значение с веб-страницы:
coeff = 1.06
rate = 0
def parce():
driver = webdriver.Chrome()
driver.get('https://bcs-express.ru/kotirovki-i-grafiki/eur_rub__tod')
element = driver.find_element(by=By.CSS_SELECTOR, value="div.Here.EWHp.Dlhk")
driver.quit()
return element
def job():
global rate
rate = float(parce().text.replace(',', '.'))
print(rate)
schedule.every(10).minutes.do(job())
def get_value(coeff, rate):
curreu = str(round(rate*coeff, 2))
fin = "человек выдаст наличные евро, с вас перевод на карту сбербанка или другого российского банка. Курс обмена евро - " + curreu + " руб.\n" + "\n" + "Возможен обмен в обратную сторону. Курс уточняйте.\n" + "\n" + "Покупаем криптовалюту. Курс уточняйте."
return fin
При запуске кода секунд через 10 выскакивает следующая ошибка:
Traceback (most recent call last):
File "C:\Users\user\PycharmProjects\Currency_bot\venv\lib\site-packages\urllib3\connection.py", line 200, in _new_conn
sock = connection.create_connection(
File "C:\Users\user\PycharmProjects\Currency_bot\venv\lib\site-packages\urllib3\util\connection.py", line 85, in create_connection
raise err
File "C:\Users\user\PycharmProjects\Currency_bot\venv\lib\site-packages\urllib3\util\connection.py", line 73, in create_connection
sock.connect(sa)
ConnectionRefusedError: [WinError 10061] Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:\Users\user\PycharmProjects\Currency_bot\venv\lib\site-packages\urllib3\connectionpool.py", line 790, in urlopen
response = self._make_request(
File "C:\Users\user\PycharmProjects\Currency_bot\venv\lib\site-packages\urllib3\connectionpool.py", line 496, in _make_request
conn.request(
File "C:\Users\user\PycharmProjects\Currency_bot\venv\lib\site-packages\urllib3\connection.py", line 388, in request
self.endheaders()
File "C:\Users\user\AppData\Local\Programs\Python\Python39\lib\http\client.py", line 1280, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "C:\Users\user\AppData\Local\Programs\Python\Python39\lib\http\client.py", line 1040, in _send_output
self.send(msg)
File "C:\Users\user\AppData\Local\Programs\Python\Python39\lib\http\client.py", line 980, in send
self.connect()
File "C:\Users\user\PycharmProjects\Currency_bot\venv\lib\site-packages\urllib3\connection.py", line 236, in connect
self.sock = self._new_conn()
File "C:\Users\user\PycharmProjects\Currency_bot\venv\lib\site-packages\urllib3\connection.py", line 215, in _new_conn
raise NewConnectionError(
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x000002AB5AF8C9A0>: Failed to establish a new connection: [WinError 10061] Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:\Users\user\PycharmProjects\Currency_bot\main.py", line 44, in <module>
job()
File "C:\Users\user\PycharmProjects\Currency_bot\main.py", line 31, in job
rate = float(parce().text.replace(',', '.'))
File "C:\Users\user\PycharmProjects\Currency_bot\venv\lib\site-packages\selenium\webdriver\remote\webelement.py", line 90, in text
return self._execute(Command.GET_ELEMENT_TEXT)["value"]
File "C:\Users\user\PycharmProjects\Currency_bot\venv\lib\site-packages\selenium\webdriver\remote\webelement.py", line 395, in _execute
return self._parent.execute(command, params)
File "C:\Users\user\PycharmProjects\Currency_bot\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 344, in execute
response = self.command_executor.execute(driver_command, params)
File "C:\Users\user\PycharmProjects\Currency_bot\venv\lib\site-packages\selenium\webdriver\remote\remote_connection.py", line 290, in execute
return self._request(command_info[0], url, body=data)
File "C:\Users\user\PycharmProjects\Currency_bot\venv\lib\site-packages\selenium\webdriver\remote\remote_connection.py", line 311, in _request
response = self._conn.request(method, url, body=body, headers=headers)
File "C:\Users\user\PycharmProjects\Currency_bot\venv\lib\site-packages\urllib3\_request_methods.py", line 110, in request
return self.request_encode_url(
File "C:\Users\user\PycharmProjects\Currency_bot\venv\lib\site-packages\urllib3\_request_methods.py", line 143, in request_encode_url
return self.urlopen(method, url, **extra_kw)
File "C:\Users\user\PycharmProjects\Currency_bot\venv\lib\site-packages\urllib3\poolmanager.py", line 443, in urlopen
response = conn.urlopen(method, u.request_uri, **kw)
File "C:\Users\user\PycharmProjects\Currency_bot\venv\lib\site-packages\urllib3\connectionpool.py", line 874, in urlopen
return self.urlopen(
File "C:\Users\user\PycharmProjects\Currency_bot\venv\lib\site-packages\urllib3\connectionpool.py", line 874, in urlopen
return self.urlopen(
File "C:\Users\user\PycharmProjects\Currency_bot\venv\lib\site-packages\urllib3\connectionpool.py", line 874, in urlopen
return self.urlopen(
File "C:\Users\user\PycharmProjects\Currency_bot\venv\lib\site-packages\urllib3\connectionpool.py", line 844, in urlopen
retries = retries.increment(
File "C:\Users\user\PycharmProjects\Currency_bot\venv\lib\site-packages\urllib3\util\retry.py", line 515, in increment
raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type]
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='localhost', port=64172): Max retries exceeded with url: /session/b586997e63604271511536623bab5d83/element/37616432B7832A50AFAA3E6EF1237013_element_19/text (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x000002AB5AF8C9A0>: Failed to establish a new connection: [WinError 10061] Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение'))
Process finished with exit code 1
Я подумал, что дело в шедулере, и решил для начала просто вывести парсер в отдельную функцию:
coeff = 1.06
def parce():
driver = webdriver.Chrome()
driver.get('https://bcs-express.ru/kotirovki-i-grafiki/eur_rub__tod')
element = driver.find_element(by=By.CSS_SELECTOR, value="div.Here.EWHp.Dlhk")
driver.quit()
return element
def get_value(coeff):
curreu = str(round(float(parce().text.replace(',', '.'))*coeff, 2))
fin = "человек выдаст наличные евро, с вас перевод на карту сбербанка или другого российского банка. Курс обмена евро - " + curreu + " руб.\n" + "\n" + "Возможен обмен в обратную сторону. Курс уточняйте.\n" + "\n" + "Покупаем криптовалюту. Курс уточняйте."
return fin
print(get_value(coeff))
И в данном случае выскакивает та же самая ошибка, которую я получил при попытке составить расписание, т.е. мой код ломается на попытке вывести парсер в отдельную функцию и я совершенно не понимаю, в чем причина. Пожалуйста, скажите, это я дурак или кто-то еще?