在 python 中无法使用 selenium 和 chromedriver 按 id 找到元素

cant find element by id with selenium and chromedriver in python

我一直收到这个错误。 我正在尝试登录我的 godaddy 帐户,以便每天使用新文本自动更新我的网站。它一直说它无法通过 id 找到元素,但我已经在 PyCharm 编辑器中尝试了所有其他 find_element_by_ 方法。 None 其中似乎有效。 XPath、class、选择器、名称等

"C:\Users\mperr\PycharmProjects\Selenium Scripts\venv\Scripts\python.exe" "C:/Users/mperr/PycharmProjects/Selenium Scripts/macAndCheeseBar.py"
Traceback (most recent call last):
  File "C:/Users/mperr/PycharmProjects/Selenium Scripts/macAndCheeseBar.py", line 10, in <module>
    user_input = driver.find_element_by_id("username")
  File "C:\Users\mperr\PycharmProjects\Selenium Scripts\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 360, in find_element_by_id
    return self.find_element(by=By.ID, value=id_)
  File "C:\Users\mperr\PycharmProjects\Selenium Scripts\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 976, in find_element
    return self.execute(Command.FIND_ELEMENT, {
  File "C:\Users\mperr\PycharmProjects\Selenium Scripts\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:\Users\mperr\PycharmProjects\Selenium Scripts\venv\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="username"]"}
  (Session info: chrome=83.0.4103.61)

这是我的代码:

from selenium import webdriver

username = "myUsername"
password = "myPassword"

driver = webdriver.Chrome(r"C:\Users\mperr\Downloads\chromedriver_win32\chromedriver.exe")
driver.get("https://sso.godaddy.com/?realm=idp&path=%2Fproducts&app=account")

user_input = driver.find_element_by_id("username")
user_input.send_keys(username)

password_input = driver.find_element_by_id("password")
password_input.send_keys(password)

login_button = driver.find_element_by_id("submit Btn")
login_button.click()

这是html:

<input id="username" type="username" aria-labelledby="label-username" aria-required="false" class="username-input ctHidden form-control" value="">

<input id="password" type="password" aria-labelledby="label-password" aria-required="false" class="ctHidden form-control" value="">

<button target="_parent" tabindex="0" class="btn btn-primary btn-purchase btn-block" id="submitBtn" type="button">Sign In</button>

我在这里发什么东西吗?

您的代码没有等待页面完全加载。 我尝试了您的代码并做了一些更改,这是我的代码,

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

username = 'your username'
password = 'your password'

driver =webdriver.Chrome(r"C:\Users\mperr\Downloads\chromedriver_win32\chromedriver.exe")
driver.get("https://sso.godaddy.com/")
element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "username"))
    )   #wait for page to load, so element with ID 'username' is visible

user_input = driver.find_element_by_id("username")
user_input.send_keys(username)

password_input = driver.find_element_by_id("password")
password_input.send_keys(password)

login_button = driver.find_element_by_id("submitBtn")
login_button.click()

您可以阅读有关 selenium 等待的文档 here。 您甚至可以使用 python 的时间模块等待