0

I'm new to Selenium. I'm trying to write a Python script that will log in to a particular form. The form is located at http://www.tvta.ca/securedContent

The code I'm running is:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()
driver.get("http://tvta.ca/securedContent/")
elem = driver.find_element_by_name("txtUserName")
elem.clear()
elem.send_keys("<<my email>>")

I get an error that says:

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [name="txtUserName"]

I'm not sure what I'm missing here? I've checked the source of the webpage the login field is definitely named txtUserName.

undetected Selenium
  • 183,867
  • 41
  • 278
  • 352
Jeff
  • 93
  • 1
  • 11

3 Answers3

4

You need to switch to the frame to write text in the textbox, try to check syntax once as I have less in good in Python

framLogin= driver.find_element_by_id("membeeLoginIF")
driver.switch_to.frame(framLogin)
EmailTxt = driver.find_element_by_name("txtUserName")
EmailTxt.send_Keys("Test@gmail.com")

Same in Java

WebElement framLogin= driver.findElement(By.id("membeeLoginIF"));
driver.switchTo().frame(framLogin);
WebElement EmailTxt = driver.findElement(By.name("txtUserName"));
EmailTxt.sendKeys("Test@gmail.com");
iamsankalp89
  • 4,607
  • 2
  • 15
  • 36
3

That site requires third-party cookies to be enabled; without them, the login form does not load. It's likely you have your browser configured that way but the defaults for webdriver.Firefox do not.

To see what Selenium is actually seeing, dump driver.page_source and/or take a screenshot with driver.save_screenshot(...).

kungphu
  • 4,592
  • 3
  • 28
  • 37
3

The desired element is within an <iframe>. So as per best practices you have to:

  • Induce WebDriverWait for the desired frame to be available and switch to it.

  • Induce WebDriverWait for the desired element to be clickable and you can use the following Locator Strategies:

    WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.ID,"membeeLoginIF")))
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.textboxWaterMark#txtUserName"))).send_keys("Jeff")
    
  • You have to add the following imports :

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
undetected Selenium
  • 183,867
  • 41
  • 278
  • 352