Message: Unable to locate element, Selenium Python

Question:

I’m trying to get access to this page "fullcollege" with a bot I’m making for students. The problem is that I can’t even select an element from it, and this error shows up. I have recently tested my code with another webpages like instagram and everything works perfectly. Anyone knows what can I do to solve this? Thanks in advance.

My code:

from time import sleep
from selenium import webdriver

browser = webdriver.Firefox()
browser.implicitly_wait(5)

browser.get('https://www.fullcollege.cl/fullcollege/')

sleep(5)

username_input = browser.find_element_by_xpath("//*[@id='textfield-3610-inputEl']")
password_input = browser.find_element_by_xpath("//*[@id='textfield-3611-inputEl']")

username_input.send_keys("username")
password_input.send_keys("password")

sleep(5)

browser.close()

The error:

Traceback (most recent call last):
  File "c:UsersmartiOneDriveEscritoriowooDiscordBotBetterCollegetester.py", line 11, in <module>
    username_input = browser.find_element_by_xpath("//*[@id='textfield-3610-inputEl']")
  File "C:UsersmartiAppDataLocalProgramsPythonPython38libsite-packagesseleniumwebdriverremotewebdriver.py", line 394, in find_element_by_xpath
    return self.find_element(by=By.XPATH, value=xpath)
  File "C:UsersmartiAppDataLocalProgramsPythonPython38libsite-packagesseleniumwebdriverremotewebdriver.py", line 976, in find_element
    return self.execute(Command.FIND_ELEMENT, {
  File "C:UsersmartiAppDataLocalProgramsPythonPython38libsite-packagesseleniumwebdriverremotewebdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:UsersmartiAppDataLocalProgramsPythonPython38libsite-packagesseleniumwebdriverremoteerrorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: //*[@id='textfield-3610-inputEl']
Asked By: empress

||

Answers:

The username and password field is inside and iframe you need to switch it first.

browser.get('https://www.fullcollege.cl/fullcollege/')
WebDriverWait(browser,10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe#logFrame")))
sleep(5)

username_input = browser.find_element_by_xpath("//input[@id='textfield-3610-inputEl']")
password_input = browser.find_element_by_xpath("//input[@id='textfield-3611-inputEl']")

username_input.send_keys("username")
password_input.send_keys("password")

import below libraries as well.

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