Попытка войти в Xbox / Microsoft с Selenium, но кнопка «Вход» никогда не нажимается - PullRequest
0 голосов
/ 28 января 2020

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

Редактировать : Используемая страница здесь

1 Ответ

1 голос
/ 28 января 2020

Если проблема вызвана тем же идентификатором, объявите отдельную переменную для кнопки «Вход», используя текст:

log_in = driver.find_element_by_xpath('//*[contains(text(), "Log In")]')

log_in.click()

РЕДАКТИРОВАТЬ:

I ' Вы посмотрели форму входа на xbox live, URL, который вы указали. Кнопка, которую вы хотите нажать после ввода пароля, называется «Войти», и это ее ЗНАЧЕНИЕ, а не ТЕКСТ.

Попробуйте этот xpath:

log_in = driver.find_element_by_xpath('//*[contains(@value, "Sign in")]')

log_in.click()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...