Заставьте Selenium продолжить работу после ошибки тайм-аута
У меня есть код, который возвращает название списка сайтов. Иногда загрузка веб-сайта занимает абсурдное время, поэтому, когда это происходит, появляется сообщение об ошибке тайм-аута. Я бы хотел, чтобы при возникновении такой ошибки программа продолжала работать, а не полностью останавливаться.
Код:
from pyvirtualdisplay import Display
from time import sleep
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
display = Display(visible=0, size(800,600))
display.start()
driver = webdriver.Firefox(executable_path='/usr/local/lib/geckodriver/geckodriver')
driver.set_page_load_timeout(60)
driver.get('https://google.com')
print(driver.title)
Следующий код вызывает тайм-аут, когда через 60 секунд страница не загружается:
driver.set_page_load_timeout(60)
По истечении 60 секунд программа останавливается и выдает ошибку тайм-аута. Вместо этого я хочу продолжить со следующего URL.
2 ответа
Чтобы перебрать список URL-адресов даже в случае ошибки page_load_timeout, вы можете использовать следующее решение:
Блок кода:
from selenium import webdriver from selenium.common.exceptions import TimeoutException urls = ["https://www.booking.com/hotel/in/the-taj-mahal-palace-tower.html?label=gen173nr-1FCAEoggJCAlhYSDNiBW5vcmVmaGyIAQGYATG4AQbIAQzYAQHoAQH4AQKSAgF5qAID;sid=338ad58d8e83c71e6aa78c67a2996616;dest_id=-2092174;dest_type=city;dist=0;group_adults=2;hip_dst=1;hpos=1;room1=A%2CA;sb_price_type=total;srfid=ccd41231d2f37b82d695970f081412152a59586aX1;srpvid=c71751e539ea01ce;type=total;ucfs=1&#hotelTmpl", "https://www.google.com/"] driver = webdriver.Chrome(executable_path=r'C:\WebDrivers\chromedriver.exe') driver.set_page_load_timeout(2) for url in urls: try : driver.get(url) print("URL successfully Accessed ... Proceeding with other tasks !!!") # perform other operations within the url except TimeoutException as e: print("Page load Timeout Occured ... moving to next item !!!") driver.quit()
Консольный вывод:
Page load Timeout Occured ... moving to next item !!! Page load Timeout Occured ... moving to next item !!!
Замечания:
set_page_load_timeout(2)
используется для воспроизведения тайм-аута загрузки страницы только в демонстрационных целях.- Список URL-адресов только для демонстрационных целей.
Подробное обсуждение времени ожидания загрузки страницы можно найти в разделе Как установить время ожидания "driver.get" для python selenium 3.8.0?
Вы можете использовать try, кроме как для обработки и передачи любой ошибки.
from pyvirtualdisplay import Display
from time import sleep
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
display = Display(visible=0, size(800,600))
display.start()
driver = webdriver.Firefox(executable_path='/usr/local/lib/geckodriver/geckodriver')
try:
driver.set_page_load_timeout(60)
except Exception as e:
print(e)
driver.get('https://google.com')
print(driver.title)