Редактировать 2 :
На основании принятого ответа я внес изменения, необходимые для работы кода. Я добавил expected_conditions
, потому что Selenium все еще не мог найти элемент, пока я не сделал это. Вот окончательная замена кода для ответа.
log_in = (By.XPATH, '//*[contains(@value, "Sign in")]')
WebDriverWait(driver, 20).until(EC.presence_of_element_located(log_in)).click()
и вот замена всего моего кода входа. Вы увидите, что я изменил свое поле пароля, чтобы подождать, пока он не станет кликабельным, и не появится. Это потому, что теперь пароль не вводился, пока я не сделал это.
def login(user, passwd):
chrome_options = Options()
chrome_options.add_argument("--headless")
# chrome_options.add_experimental_option('excludeSwitches', ['enable-logging'])
driver = Chrome("C:\\bin\\chromedriver", options=chrome_options)
driver.get(login_url)
un_field = (By.ID, "i0116")
pw_field = (By.ID, "i0118")
next_button = (By.ID, "idSIButton9")
WebDriverWait(driver, 20).until(EC.presence_of_element_located(un_field)).send_keys(user)
WebDriverWait(driver, 20).until(EC.element_to_be_clickable(next_button)).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable(pw_field)).send_keys(passwd)
log_in = (By.XPATH, '//*[contains(@value, "Sign in")]')
WebDriverWait(driver, 20).until(EC.presence_of_element_located(log_in)).click()
return driver
ОРИГИНАЛЬНЫЙ ВОПРОС
Я использую Selenium Webdriver с Chrome для попробуйте войти в Microsoft / Xbox Live. Я использую явное ожидание, чтобы дождаться, когда элемент будет присутствовать или может быть нажат Проблема заключается в том, что после успешного ввода имени пользователя, нажатия кнопки «Далее» и ввода пароля моя программа никогда не нажимает кнопку «Войти» и просто продолжает выполнение.
def login(user, passwd):
chrome_options = Options()
# chrome_options.add_argument("--headless")
chrome_options.add_experimental_option('excludeSwitches', ['enable-logging'])
driver = Chrome("C:\\bin\\chromedriver", options=chrome_options)
driver.get(login_url)
un_field = (By.ID, "i0116")
pw_field = (By.ID, "i0118")
next_button = (By.ID, "idSIButton9")
WebDriverWait(driver, 20).until(EC.presence_of_element_located(un_field)).send_keys(user)
WebDriverWait(driver, 20).until(EC.element_to_be_clickable(next_button)).click()
WebDriverWait(driver, 20).until(EC.presence_of_element_located(pw_field)).send_keys(passwd)
WebDriverWait(driver, 20).until(EC.element_to_be_clickable(next_button)).click()
return driver
Я подозреваю причину этой проблемы Дело в том, что кнопка «Далее» с предыдущего экрана и кнопка «Вход» с экрана пароля имеют одинаковый идентификатор элемента, но я не получаю никаких ошибок, что меня удивляет. Я даже пытался нажать Return с Keys.RETURN
в поле пароля вместо того, чтобы нажимать «Log In» с .click()
, но это не работает.
Кроме того, при работе без режима без головы это выглядит почти следующим образом страница, которую я получаю с драйвером позже в коде, прерывает экран входа в систему, но я не могу быть уверен.
Редактировать : Используемая страница здесь