TL; DR, см. Код с поясняющими комментариями ниже.
Одной из причин, по которой она не работает, может быть то, что вам нужно дождаться, пока формабыть визуализированным, видимым и интерактивным . Эту проблему можно решить с помощью явного ожидания .
Еще одна проблема, которую я заметил, просто нажав «Принять условия» с помощью .click()
, заключалась в том, что щелчок происходит в серединеэлемента, он открывает Условия использования в отдельной вкладке, что нежелательно. Вы можете обойти это, щелкнув со смещением (0, 0)
с помощью Action Chains .
Что касается перехода к флажкам с локаторами селена, это может бытьсделано различными способами. В приведенном ниже коде я использую CSS-селекторы при проверке значения for
атрибутов label
элементов.
Рабочий код:
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.remote.webelement import WebElement
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get('https://onecall.1100.com.au/au-b4-en/Account/Login')
wait = WebDriverWait(driver, 10)
# wait for the form to get visible
login_form = wait.until(EC.visibility_of_element_located((By.ID, 'loginForm')))
# accept terms
accept_terms = login_form.find_element_by_css_selector('label[for=acceptTermsAndConditions]')
ActionChains(driver).move_to_element_with_offset(accept_terms, 0, 0).click().perform()
# keep me logged in
login_form.find_element_by_css_selector('label[for=checkbox2]').click()
# take a screenshot to prove it is working
login_form.screenshot('form.png')
И это то, что вы увидите в form.png
: