簡體   English   中英

如何在 Disneyworld 登錄頁面中找到 Email 地址字段以使用 Selenium (Python) 發送文本

[英]How to find the Email Address field within Disneyworld login page to send text using Selenium (Python)

我正在編寫一個簡單的程序來自動登錄我的迪士尼世界帳戶。 我無法成功找到 email 地址元素。 我已經成功地自動化了 Disney World 網站上的其他按鈕,但出於某種原因,我無法找到 email 地址元素。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

login_url = "https://disneyworld.disney.go.com/login?appRedirect=%2F"

driver = webdriver.Chrome(executable_path=r"MY_CHROMEDRIVER_PATH")
driver.get(login_url)

print("Starting...")

try:
    email_input = WebDriverWait(driver, 8).until(
        EC.presence_of_element_located((By.XPATH, "")) #See below what I've tried on this line

    )
    print("Found element, sending keys...")
    email_input.send_keys("test")
except:
    print("Failed...")
    driver.quit()

我嘗試了以下但沒有成功:


EC.presence_of_element_located((By.XPATH, "//input\[@type='email'\]"))

EC.presence_of_element_located((By.XPATH, "//div\[@id='did-ui-view'\]/div/section/section/form/section/div/div/label/span\[2\]/input"))

EC.presence_of_element_located((By.CSS_SELECTOR, ".ng-valid"))

EC.presence_of_element_located((By.CLASS_NAME, "input-wrapper"))

EC.presence_of_element_located((By.CLASS_NAME, "field-group"))

EC.presence_of_element_located((By.CLASS_NAME, "field field-username-email badgeable"))

我還嘗試了上面示例的許多其他版本,太尷尬了,無法在這里發布。 我已經使用了檢查元素工具並嘗試了我能想到的一切。 我還下載了 Selenium IDE Chrome 擴展程序來記錄我的擊鍵並找到與我交互的元素的確切 XPATH。 老實說,我不知道還能嘗試什么,這就是我發布這個問題的原因。 任何幫助,將不勝感激。

帶有文本作為電子郵件登錄的元素位於<iframe>中,因此您必須:

  • 誘導WebDriverWait以等待所需的框架可用並切換到它

  • 誘導WebDriverWait使所需的元素可點擊

  • 您可以使用以下任一定位器策略

    • 使用CSS_SELECTOR

       driver.get('https://disneyworld.disney.go.com/login?appRedirect=%2F') WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe#disneyid-iframe"))) WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[aria-label='Username or Email Address']"))).send_keys("TheAtypicalNerd")
    • 使用XPATH

       driver.get('https://disneyworld.disney.go.com/login?appRedirect=%2F') WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@id='disneyid-iframe']"))) WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@aria-label='Username or Email Address']"))).send_keys("TheAtypicalNerd")
  • 注意:您必須添加以下導入:

     from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
  • 瀏覽器快照:

迪斯尼樂園


參考

您可以在以下位置找到幾個相關的討論:

登錄框位於iframe中,您需要在嘗試與其交互之前切換到它。

試試下面的代碼片段

try:
    # wait or i frame to be located
    i_frame = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, '//*[@id="disneyid-iframe"]')))

    # switch to iframe
    driver.switch_to.frame(i_frame)

    # find email input text field
    email_input = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, '//*[@id="did-ui-view"]/div/section/section/form/section/div[1]/div/label/span[2]/input'))
    )
    print("Found element, sending keys...")
    email_input.send_keys("test")
except:
    print('Failed')
    driver.quit()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM