Python + Selenium: дождаться полной загрузки элемента
Поэтому я пытался поиграть с функцией в Selenium, которая называется:
wait = WebDriverWait(browser, 20).wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="accountStandalone"]/div/div/div[2]/div/div/div[1]/button')))
wait.click()
Прежде чем я начну говорить вопрос. То, что я пытаюсь сделать Selenium - это сделать Selenium, который автоматически пишет форумчану на этой картинке:
Что не является какими-либо осложнениями. Однако всякий раз, когда я нажимаю "Skapa Konto", он загружается и ждет, пока не появится новая страница:
Который на картинке выше. Моя идея состоит в том, что я хочу, чтобы он ждал, пока он не даст мне эту "картинку" (которая является той же ссылкой, поэтому она не вносит никаких изменений), поэтому я полагаю, что лучше сделать, это подождать, пока текст и т.д. "FORTSÄTT или привет "это браузер. Тогда продолжай.
Тем не менее, у меня возникла проблема при попытке использовать это. Причина в том, что он не ждет, пока найдет, а работает мгновенно и делает другие вещи, которые не должен делать. Прямо сейчас он просто пропускает ожидание, как будто функция не работает или есть вообще. Что я сделал не так?
Обновить:
Что я знаю, так это то, что всякий раз, когда я пытаюсь зарегистрироваться на веб-сайте, веб-сайт не меняется, и это означает, что я перехожу на новую страницу, когда он успешно зарегистрирован. Но он делает автоматическое обновление и говорит, что это было успешно. Это означает, что каким-то образом я хочу сделать что-то таким образом, чтобы он проверял и видел, случилось ли что-то новое со страницей. Если нет, подожди еще раз и попробуй еще раз?... Что-то подобное?
Что я хотел бы сделать, так это проверить, есть ли:
<div class="confirmation-title nsg-font-family--platform nsg-text--black edf-title-font-size--xlarge js-confirmationTitle">NU ÄR DU MEDLEM, Hello.</div>
или же
<button type="button" class="nsg-button nsg-bg--black register-next-step-cta js-nextStepCta">FORTSÄTT</button>
Однако проблема, как я уже сказал, всякий раз, когда я нажимаю "SKAPA KONTO" - он просто ждет, пока сервер дважды проверит, а затем автоматически обновит страницу и скажет "успешно".
1 ответ
Прежде всего, я твердо верю, что вы были довольно близки. Вам просто нужно отформатировать свой код в Pythonic, который может решить вашу проблему сразу же следующим образом:
WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="accountStandalone"]/div/div/div[2]/div/div/div[1]/button'))).click()
Вы натолкнулись на реальную проблему, упомянув, что она не ждет, пока обнаружится, а работает мгновенно и делает другие вещи, которые не следует делать, вместо того, чтобы упоминать, что ваша программа должна делать (например, пробный код) и что неправильно ваша программа делает (т.е. трассировка стека ошибок).
В соответствии с HTML-файлами, которыми вы поделились, вы можете вызвать официанта для любого из WebElements следующим образом:
Официант для видимости текста NU ÄR DU MEDLEM, Привет.:
CSS_SELECTOR:
WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.confirmation-title.nsg-font-family--platform.nsg-text--black.edf-title-font-size--xlarge.js-confirmationTitle")))
XPATH:
WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='confirmation-title nsg-font-family--platform nsg-text--black edf-title-font-size--xlarge js-confirmationTitle' and contains(.,'NU ÄR DU MEDLEM, Hello.')]")))
Официант для кнопки с текстом FORTSÄTT:
CSS_SELECTOR:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.nsg-button.nsg-bg--black.register-next-step-cta.js-nextStepCta")))
XPATH:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='nsg-button nsg-bg--black register-next-step-cta js-nextStepCta' and contains(.,'FORTSÄTT')]")))