Задать вопрос
@pavelermolenko

Как сделать парсинг selenium раз в десять минут?

Суть проблемы - занимаюсь ботом телеграм, который по запросу пользователя выводит некий курс валюты, который парсится с сайта. Первоначальный фрагмент кода с парсером, который в дальнейшем срабатывает на команды и колбэки, выглядит следующим образом:
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))

И в данном случае выскакивает та же самая ошибка, которую я получил при попытке составить расписание, т.е. мой код ломается на попытке вывести парсер в отдельную функцию и я совершенно не понимаю, в чем причина. Пожалуйста, скажите, это я дурак или кто-то еще?
  • Вопрос задан
  • 122 просмотра
Подписаться 1 Средний 5 комментариев
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы