我正在撰寫一個簡單的程式來自動登錄我的迪士尼世界帳戶。我無法成功找到電子郵件地址元素。我已經成功地自動化了迪士尼世界網站上的其他按鈕,但無論出于何種原因,我都找不到電子郵件地址元素。
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=/"
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。老實說,我不知道還能嘗試什么,這就是我發布這個問題的原因。任何幫助,將不勝感激。
uj5u.com熱心網友回復:
文本為E-Mail Login的元素位于 an 內,<iframe>因此您必須:
誘導WebDriverWait使所需的幀可用并切換到它。
誘導WebDriverWait使所需元素成為可點擊的。
您可以使用以下任一定位器策略:
使用CSS_SELECTOR:
driver.get('https://disneyworld.disney.go.com/login?appRedirect=/') 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=/') 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瀏覽器快照:

參考
您可以在以下位置找到一些相關的討論:
- 通過 Selenium 和 python 切換到 iframe
uj5u.com熱心網友回復:
登錄框存在于 中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()
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/451816.html
標籤:Python 硒 路径 css 选择器 网络驱动程序等待
上一篇:縮短硒線選項
下一篇:OSError:[Errno8]Execformaterror:'/home/ec2-user/Desktop/chromedriver'在AWSEC2ARM風味機器中使用Chro
