Переопределение Python Selenium WebDriver.get () для перехвата TimeoutException - PullRequest
0 голосов
/ 17 июня 2019

Я использую Python Selenium с Chromedriver.Время от времени при вызове webdriver.get() выдается TimeoutException.Я успешно перехватываю каждое другое исключение с помощью явного ожидания, но TimeoutException, кажется, возникает, когда сетевой поток сбрасывается.

Что я хочу сделать, это изменить метод webdriver.get() (с помощью переопределений или подклассов) чтобы каждый раз, когда мое приложение вызывало get(), оно автоматически:

  • Поймало и обработало TimeoutException
  • Повторите запрос get() несколько раз

Как мне это сделать?

Примечание : Этот вопрос не является дубликатом Как установить время ожидания «driver.get» для python selenium 3.8.0? - Я пытаюсь добавить неявную функциональность в метод get ().Причина, по которой я не просто оборачиваю свои вызовы get () в блок try / Кроме того, вручную, потому что я делаю большинство из них через мое приложение и пытаюсь быть СУХОЙ.

Ответы [ 2 ]

0 голосов
/ 18 июня 2019

Я понял это.Вы должны подкласс EventFiringWebDriver, как это:

from selenium.support.events import EventFiringWebDriver

class MyWebDriver(EventFiringWebDriver):
    def get( self ,url):
        try:
            super().get(url)
        except TimeoutException:
            # your exception handling code goes here
0 голосов
/ 18 июня 2019

Я думаю, что лучший способ - сделать попытку / исключение и сделать исключение только для перехвата TimeOutException

from selenium.common.exceptions import TimeoutException
try:
    webdriver.get(url)
except TimeoutException:
    time.sleep(5)
    webdriver.get(url)

Если проблема в том, что вы должны сделать это несколько раз, инкапсулируйте это в методе

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...