Как отправить AppleID в поле для входа? - PullRequest
1 голос
/ 20 февраля 2020

Почему это неверно:

Веб-страница: https://idmsa.apple.com/IDMSWebAuth/signin?appIdKey=a01459d797984726ee0914a7097e53fad42b70e1f08d09294d14523a1d4f61e1&rv=2&path=

Выполнены следующие шаги:

  1. Осмотреть элемент селектор, нажмите на поле Apple ID

  2. показывает:

<input type="text" class="force-ltr form-textbox form-textbox-text" id="account_name_text_field" can-field="accountName" autocomplete="off" autocorrect="off" autocapitalize="off" aria-required="true" required="required" aria-describedby="apple_id_field_label" spellcheck="false" ($focus)="appleIdFocusHandler()" ($keyup)="appleIdKeyupHandler()" ($blur)="appleIdBlurHandler()" placeholder="Apple&nbsp;ID" autofocus="">
Мой код:
driver.find_element_by_id("account_name_text_field").send_keys(username)
Ошибка:
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="account_name_text_field"]"}

Я даже положил спящий режим на 100 se c на всякий случай, если произошла ошибка из-за того, что загрузка заняла некоторое время.

1 Ответ

2 голосов
/ 21 февраля 2020

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

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

    • Блок кода:

      driver.get("https://idmsa.apple.com/IDMSWebAuth/signin?appIdKey=a01459d797984726ee0914a7097e53fad42b70e1f08d09294d14523a1d4f61e1&rv=2&path")
      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.ID,"aid-auth-widget-iFrame")))
      WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "account_name_text_field"))).send_keys("Tom")
      
    • Примечание : необходимо добавить следующий импорт:

      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support import expected_conditions as EC
      
  • Снимок браузера:

AppleID


Ссылка

Здесь вы можете найти пару соответствующих обсуждений в:

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