Python 3.10: ошибка при работе с веб узлом (при выполнении скрипта через Selenium)
Есть код, который выполняет ряд функций по работе с html посредством Selenium.
В среднем каждый десятый прогон скрипт падает в связи с потеряй коннекта с сайтом.
Причем, на сети потерь с данным узлом нет (iperf и ping).
Было принято решение попробовать обрабатывать эту ошибку, и в случае ее возникновения перезапускать весь скрипт.
Но при попытке добавить это исключение python ругается на то, что данного модуля у него нет. Для примера, TimeoutException. Подскажите, как лучше реализовать обход этой ошибки? Возможно есть более простой способ.
Ранее стоял
except Exception as e:
write_debug(e)
driver.close()
driver.quite()
main()
но он не давал успеха.
Ниже вывод последней ошибки.
Traceback (most recent call last):
File "C:\Users\JunG\Desktop\send_cards_v3.py", line 247, in send_cards
elem_vsplit_push = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH,
File "C:\Program Files\Python310\lib\site-packages\selenium\webdriver\support\wait.py", line 95, in until
raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:
Stacktrace:
GetHandleVerifier [0x00007FF728135E42+3538674]
(No symbol) [0x00007FF727D54C02]
(No symbol) [0x00007FF727C05AEB]
(No symbol) [0x00007FF727C4BF4E]
(No symbol) [0x00007FF727C4C0CC]
(No symbol) [0x00007FF727C8E477]
(No symbol) [0x00007FF727C6F0EF]
(No symbol) [0x00007FF727C8BDE3]
(No symbol) [0x00007FF727C6EE53]
(No symbol) [0x00007FF727C3F514]
(No symbol) [0x00007FF727C40631]
GetHandleVerifier [0x00007FF728166CAD+3738973]
GetHandleVerifier [0x00007FF7281BC506+4089270]
GetHandleVerifier [0x00007FF7281B4823+4057299]
GetHandleVerifier [0x00007FF727E85C49+720121]
(No symbol) [0x00007FF727D6126F]
(No symbol) [0x00007FF727D5C304]
(No symbol) [0x00007FF727D5C432]
(No symbol) [0x00007FF727D4BD04]
BaseThreadInitThunk [0x00007FFEAA5B7614+20]
RtlUserThreadStart [0x00007FFEABEA26A1+33]
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Program Files\Python310\lib\site-packages\urllib3\connection.py", line 174, in _new_conn
conn = connection.create_connection(
File "C:\Program Files\Python310\lib\site-packages\urllib3\util\connection.py", line 95, in create_connection
raise err
File "C:\Program Files\Python310\lib\site-packages\urllib3\util\connection.py", line 85, in create_connection
sock.connect(sa)
ConnectionRefusedError: [WinError 10061] Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение
Ответы (1 шт):
Вы сталкиваетесь с TimeoutException, которая возникает случайным образом при выполнении вашего Selenium-скрипта. Эта ошибка возникает, когда выполнение команды занимает больше времени, чем установлено.
Решения:
- Увеличение времени ожидания:
Самое простое решение - увеличить время ожидания по умолчанию Selenium. Это можно сделать с помощью метода set_page_load_timeout() или set_script_timeout() webdriver.
driver.set_page_load_timeout(60) # 60 секунд для загрузки страницы
driver.set_script_timeout(60) # 60 секунд для выполнения скрипта
- Игнорирование ошибки:
Если увеличение времени ожидания не решает проблему, вы можете попробовать игнорировать TimeoutException. Это можно сделать с помощью блока try/except.
try:
# Ваш Selenium-код
except TimeoutException:
# etwas
- Перезапуск скрипта:
Если вы хотите перезапустить скрипт в случае TimeoutException, вы можете использовать блок try/except и функцию main().
def main():
# Ваш Selenium-код
try:
main()
except TimeoutException:
print("TimeoutException détectée. Redémarrage du script...")
main()
- Использование библиотеки обработки исключений:
Существуют сторонние библиотеки, такие как retry, которые могут помочь вам более эффективно обрабатывать исключения.
from retry import retry
@retry(tries=3, delay=2)
def main():
# Ваш Selenium-код
main()