Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Как заставить вебдрайвер не загружать страницу полностью? (Python)

ajax
python
webdriver
Теги: #<Tag:0x00007f7b6308cce0> #<Tag:0x00007f7b6308cb50> #<Tag:0x00007f7b6308c808>

(Виталий Коряков) #1

Возникла необходимость использования елемента на странице до загрузки страницы полностью. Есть возможность заставить вебдрайвер прекратить загрузку страницы (эмуляция крестика в браузере например)?


(Dmytro Makhno) #2


не оно?

wd.manage().timeouts().pageLoadTimeout(5000, TimeUnit.MILLISECONDS);

try {
        wd.get(url);
        break;
    } catch (org.openqa.selenium.TimeoutException te) {
        ((JavascriptExecutor)wd).executeScript("window.stop();");
    } catch (UnhandledAlertException uae) {
        Alert alert = wd.switchTo().alert();
        alert.accept();
    }

но если нужно определенные элемент чтобы в доме был, и сразу после этого стопаться, то нужно еще сильнее “выдумывать”. Не секрет, а зачем вам такое?


(Виталий Коряков) #3

Не секрет, дело в том, что страница находится в постоянно “загрузке”, что не дает get-у отработать до конца, соответственно не получается добраться до элементов, необходимо принудительно стопать каким то образом get. И тут я профан… )
И ваш пример под Джаву, нужен Питон. )


(Dmytro Makhno) #4

Вообще сурово, если страница никогда не подгружается.

Какая разница Питон, Джава, Руби, точкаНет.
Портируем используя docs

#impors on your own

wd.set_page_load_timeout(5) #not sure if seconds or ms
try:
  wd.get(url)
except TimeoutException:
  wd.execute_script('window.stop();')
except UnexpectedAlertPresentException: #java's UnhandledAlertException
  alert = driver.switch_to_alert()
  alert.accept()

логика есть, все биндинги в питоне есть. ищите в инете джава, больше примеров, а спортировать, как правило, не сложно.


(Виталий Коряков) #5

Идею понял, спасибо )


(Виталий Коряков) #6

Все такие не совсем подходит данное решение, так как окно у нас в постоянной загрузке, и все, что связанно с “wd” даже в except - не грузится.

import ...
wd = webdriver.Firefox()
wd.set_page_load_timeout(5)
try:
    get("http://example.com")
except TimeoutException:
    print "11111"
    wd.execute_script('window.stop();')
    print "2222"
    button = wd.find_element_by_xpath("//button[@class='class_name']")
    button.click()

print ‘1111’ отрабатывает, все что дальше - нет.
тоесть остановить execute_script-ом не удается…


(vmaximv) #7

2.40 попробуйте. Только версию ФФ смените на соответствующую.