Не удается найти элемент на странице входа Microsoft - PullRequest
2 голосов
/ 15 февраля 2020

В настоящее время я пытаюсь найти поле ввода электронной почты на странице входа в Microsoft, используя xpath (и другие), но после многих попыток я все еще не могу найти правильный элемент для него.

После копирования элемент со страницы, это заданный элемент:

<input type="email" class="form-control" placeholder="Email, phone, or Skype" aria-required="true" spellcheck="false" autocomplete="off" data-bind="
                                    hasFocus: focus,
                                    textInput: email,
                                    attr: {'placeholder': config.text.emailPlaceHolder, 'aria-invalid': !error}">

И это в настоящее время мой python код:

login = browser.find_element_by_xpath("//input[@class='form-control']")
login.send_keys(config.username)
login.send_keys(Keys.RETURN)

Я пробовал несколько раз, но все еще не могу получить правильный элемент, чтобы продолжить. После ввода https://forms.office.com/ я успешно захватил элемент входа, но застрял на следующей странице.

1 Ответ

0 голосов
/ 17 февраля 2020

Поскольку требуемый элемент находится в пределах <iframe>, поэтому для вызова click() на элементе необходимо:

  • Ввести WebDriverWait для требуемого рамка должна быть доступна и переключиться на нее .
  • Индуцировать WebDriverWait , чтобы требуемый элемент был активным для клика .
  • Вы можно использовать одну из следующих стратегий локатора :

    • с использованием XPATH:

      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH, "//iframe[@class='landing-signin-hrd' and @id='hrdIframe']")))
      login = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='form-control' and @placeholder='Email, phone, or Skype']")))
      login.send_keys("StrangerSphinx")
      login.send_keys(Keys.RETURN)
      
    • с использованием CSS_SELECTOR:

      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, "iframe.landing-signin-hrd#hrdIframe")))
      login = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.form-control[placeholder='Email, phone, or Skype']")))
      login.send_keys("StrangerSphinx")
      login.send_keys(Keys.RETURN)
      

Ссылка

Соответствующее подробное обсуждение можно найти в Способы работы с #document под iframe

...