简体   繁体   中英

cant find element by id with selenium and chromedriver in python

I keep getting this error. I am trying to log into my godaddy account in order automatically update my website every day with a new bit of text. It keeps saying it cant find the element by id, but I've tried everyother find_element_by_ method in the PyCharm editor. None of them seem to work. XPath, class, selector, name, etc.

"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)

here is my code:

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()

Here is the 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>

Am I mssing something here?

Your code wasn't waiting for the page to load completely. I tried your code with some changes, here's my code,

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()

You can read documentation about selenium waits here . You can even use python's time module for waits

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM