@evgchud
Ищу себя

Как дождаться полной загрузки страницы на Selenium python?

После метода click не получается получить тэги с новой страницы, хотя переход в Selenium отображается.
driver = webdriver.Firefox(profile)
 driver.get(url)
driver.find_element_by_xpath("//input[@name='LOGIN']").send_keys(login)
driver.find_element_by_xpath("//input[@name='PASSWORD']").send_keys(password)
driver.find_element_by_xpath("//div[@class='ENTER']/a").click()
new_page = driver.find_element_by_tag_name('html')


При поиске решений нашел статью , в которой приводятся два решения:
class wait_for_page_load(object):
    def __init__(self, browser):
        self.browser = browser
    def __enter__(self):
        self.old_page = self.browser.find_element_by_tag_name('html')
    def page_has_loaded(self):
        new_page = self.browser.find_element_by_tag_name('html')
        return new_page.id != self.old_page.id
    def __exit__(self, *_):
        wait_for(self.page_has_loaded)

with wait_for_page_load(browser):
    browser.find_element_by_link_text('my link').click()


и
from contextlib import contextmanager
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support.expected_conditions import staleness_of

class MySeleniumTest(SomeFunctionalTestClass):
    # assumes self.browser is a selenium webdriver

    @contextmanager
    def wait_for_page_load(self, timeout=30):
        old_page = self.browser.find_element_by_tag_name('html')
        yield
        WebDriverWait(self.browser, timeout).until(
            staleness_of(old_page)
        )

    def test_stuff(self):
        # example use
        with self.wait_for_page_load(timeout=10):
            self.browser.find_element_by_link_text('a link')
            # nice!


К сожалению, классами пользоваться не умею, помогите пожалуйста, встроить данные классы в мой скрипт.
  • Вопрос задан
  • 20092 просмотра
Пригласить эксперта
Ответы на вопрос 2
kshnkvn
@kshnkvn
yay ✌️ t.me/kshnkvn
from selenium.webdriver.support import expected_conditions as ec

element = WebDriverWait(driver, 10).until(ec.presence_of_element_located((By.TAG_NAME, "html")))

Вставьте строку с element перед строкой
new_page = driver.find_element_by_tag_name('html')
Пока страница не загрузится выполнение кода не продолжиться.
Ответ написан
@GeneD88
QA
Можно отслеживать состояние документа через document.readyState
Когда страница в процессе загрузки, эта проперти будет loading
Когда страница загрузится - complete

(с) https://www.w3schools.com/jsref/prop_doc_readystate.asp
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы