Общее исключение Selenium Исключение тайм-аута Сообщение: ошибка тайм-аута

Я работал над скриптом онлайн-проверки статуса для OkCupid. Итак, что произойдет, если человек, которого я отслеживаю, ведет журнал OkCupid, сценарий обнаружит его на основе <div class = "userinfo2015-basics-username-online-icon isOnline"></div>, который отображается после входа в систему. Он зацикливается каждую минуту, чтобы увидеть, есть ли какие-либо изменения статуса. По большей части работает хорошо, может продолжаться 30-40 минут, но потом вылетает. Результат скрипта выглядит так:

----------------------------------------------
[i] Status   |   Last Checked   |   Update   |
----------------------------------------------
[-] Offline      08-14 18:33:03     60 Sec   |
[+] Online       08-14 18:34:05     60 Sec   |
[+] Online       08-14 18:35:09     60 Sec   |
[+] Online       08-14 18:36:10     60 Sec   |
----------------------------------------------

Это цикл:

try:
while 1:
        status = driver.find_elements_by_tag_name('div')[41].get_attribute('class') # Span Class for Online status
        driver.refresh()
        time_online = datetime.now().strftime('%m-%d %H:%M:%S')
        time.sleep(5)
        if status == str('userinfo2015-basics-username-online-icon isOnline'):
            print('[+]  Online'+7*' '+time_online+5*' '+str(update+5)+' Sec   |')
        elif status != str('userinfo2015-basics-username-online-icon isOnline'):
            print(bc.red+'[-] Offline'+6*' '+time_online+5*' '+str(update+5)+' Sec   |')
        time.sleep(update)
except KeyboardInterrupt:
        print('  Exiting\n'+46*'-')
driver.quit()

Тогда ошибка:

Traceback (most recent call last):
File "okCupid_online_status.py", line 38, in <module>
    status = driver.find_elements_by_tag_name('div')[41].get_attribute('class') # Span Class for Online status
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 539, in find_elements_by_tag_name
    return self.find_elements(by=By.TAG_NAME, value=name)
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 985, in find_elements
    'value': value})['value'] or []
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 314, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: timeout
  (Session info: chrome=67.0.3396.99)
  (Driver info: chromedriver=2.39.562737 (dba483cee6a5f15e2e2d73df16968ab10b38a2bf),platform=Linux 4.15.0-29-generic x86_64)

Поэтому мне больше интересно, могу ли я вызвать исключение и обойти ошибку, если это произойдет, и получить свой сценарий для продолжения цикла?

Можете ли вы поймать это исключение и позволить циклу снова запуститься? Также иногда вы можете выйти из драйвера и снова открыть его через некоторое время

Phung Duy Phong 15.08.2018 12:46
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
1 114
1

Ответы 1

Трудно сказать наверняка, но по моему опыту, исключение тайм-аута в Selenium часто возникает, когда страница браузера не отвечает. В следующий раз, когда это произойдет, я предлагаю вам проверить, так ли это.

Если это действительно так, то, поскольку вы создаете парсер (в отличие от автоматизации тестирования), вы должны перехватить исключение и повторить попытку. Если бы вы писали автоматизацию тестирования, я бы сказал, что вы должны сообщить об ошибке, потому что неотвечающая страница обычно является ошибкой в ​​коде JavaScript страницы.

Другие вопросы по теме