簡體   English   中英

Python Selenium“無法定位元素”

[英]Python Selenium "Unable to locate element"

我正在嘗試使用 Selenium 在需要時自動注冊 email 帳戶。 這對我來說只是一個有趣的學習項目。 對於我的生活,我不明白為什么它找不到元素。 此代碼在登錄頁面上運行良好,但在注冊頁面上運行良好。 我嘗試了所有不同的 Selenium 命令,甚至嘗試使用 ID 和 class 名稱。 要么是說它無法找到元素,要么是鍵盤無法訪問它。

from selenium import webdriver
from selenium.webdriver.firefox.options import Options
import time


options = Options()

driver = webdriver.Firefox(options=options, executable_path=r'geckodriver.exe')


driver.get("https://mail.protonmail.com/create/new?language=en")
time.sleep(10)
username_input = driver.find_element_by_id("username").send_keys("testusername")

這里還有 HTML 代碼: https://i.imgur.com/ZaBMTzG.png

用戶名字段在iframe中,您需要切換到iframe才能使這項工作。 以下是可以正常工作的代碼:

driver.get("https://mail.protonmail.com/create/new?language=en")
driver.switch_to.frame(driver.find_element_by_css_selector("iframe[title='Registration form'][class='top']"))
driver.find_element_by_id("username").send_keys("some string")
  1. 在此處閱讀有關 iframe 的更多信息
  2. 在此處了解有關如何使用 Python selenium 綁定切換到 iframe/frame/frameset 的更多信息

更新:

wait = WebDriverWait(driver, 30)
driver.get("https://mail.protonmail.com/create/new?language=en")
driver.switch_to.frame(driver.find_element_by_css_selector("iframe[title='Registration form'][class='top']"))
driver.find_element_by_id("username").send_keys("some string")
driver.switch_to.default_content()
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
sleep(5)
driver.switch_to.frame(driver.find_element_by_css_selector("iframe[title='Registration form'][class='bottom']"))
wait.until(EC.element_to_be_clickable((By.NAME, "submitBtn"))).click()

我不確定我是否看到了足夠的代碼來診斷,但我認為你定義username_input的方式似乎有問題。 driver.find_element_by_id("username").send_keys("testusername")實際上並沒有返回任何內容,因此您似乎正在設置username_input = null

暫無
暫無

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

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