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, который автоматически пишет форумчану на этой картинке:

Pic1

Что не является какими-либо осложнениями. Однако всякий раз, когда я нажимаю "Skapa Konto", он загружается и ждет, пока не появится новая страница:

pic2

Который на картинке выше. Моя идея состоит в том, что я хочу, чтобы он ждал, пока он не даст мне эту "картинку" (которая является той же ссылкой, поэтому она не вносит никаких изменений), поэтому я полагаю, что лучше сделать, это подождать, пока текст и т.д. "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')]")))
      
Другие вопросы по тегам