Ustaw prawdziwy limit czasu na załadowanie strony w Selenium WebDriver?
Testuję witrynę z wieloma serwerami proxy, a problem polega na tym, że niektóre z tych serwerów proxy są strasznie wolne. Dlatego mój kod utknął na ładowaniu stron co jakiś czas.
from selenium import webdriver
browser = webdriver.Firefox()
browser.get("http://example.com/example-page.php")
element = browser.find_element_by_id("someElement")
Próbowałem wielu rzeczyexplicit waits
lubimplicit waits
i przeszukiwałem już dość długo, ale wciąż nie znaleźliśmy rozwiązania lub obejścia. Nic tak naprawdę nie wpływa na linię ładowania stronybrowser.get("http://example.com/example-page.php")
i dlatego zawsze tam tkwi.
Czy ktoś ma na to rozwiązanie?
Aktualizacja 1:
Odpowiedź JimEvansa rozwiązała mój poprzedni problem itutaj możesz znaleźć poprawkę Pythona dla tej nowej funkcji.
Nowy problem:
browser = webdriver.Firefox()
browser.set_page_load_timeout(30)
browser.get("http://example.com/example-page.php")
element = browser.find_element_by_id("elementA")
element.click() ## assume it's a link to a new page http://example.com/another-example.php
another_element = browser.find_element_by_id("another_element")
Jak widziszbrowser.set_page_load_timeout(30)
dotyczy tylkobrowser.get("http://example.com/example-page.php")
co oznacza, że jeśli ta strona ładuje się przez ponad 30 sekund, wyrzuci wyjątek przekroczenia limitu czasu, ale problem polega na tym, że nie ma on władzy nad ładowaniem strony, takiej jakelement.click()
, chociaż nie blokuje, dopóki nowa strona nie zostanie całkowicie załadowana,another_element = browser.find_element_by_id("another_element")
to nowy ból w dupie, ponieważ alboexplicit waits
lubimplicit waits
poczeka na załadowanie całej strony, zanim zacznie szukać tego elementu. W niektórych skrajnych przypadkach zajmie to nawetGODZINY. Co mogę z tym zrobić?