-1

I am working with selenium in python 3.6 on the chrome browser. I have programmed it to the point where I can access the website I want but I am struggling to find the text box element I am searching for. When I inspect the element it has this code.

<input placeholder="" id="ember32" class="ssRegistrationField ssEmailTextboxField ember-text-field ember-view" type="email">

But when I try and use the given ID, it does not work and says that it cannot be found. Here is my code (Without the text I wish to insert of the website URL):

from selenium import webdriver

browser = webdriver.Chrome('chromedriver.exe')

browser.get('')

email = browser.find_element_by_id("ember34")
email.send_keys('')

I have just started using Selenium today and any help figuring out what is wrong would be very appreciated.

Guy
  • 46,488
  • 10
  • 44
  • 88
Max
  • 1
  • 4

2 Answers2

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

WebDriverWait(browser,5).until(
              EC.presence_of_element_located((By.ID,'ember32')))

browser.find_element(By.ID,'ember32').send_keys('Your_Email')

The problem was the DOM has ember32 and your program is looking for ember34, Basic Typeo.

The code above will add an implicate wait for 5 seconds, search for ember32, and then time out if it cant find it.

CHebs2018
  • 36
  • 2
0

The desired element is an Ember.js element so to click() on the element you have to induce WebDriverWait for the element_to_be_clickable() and you can use either of the following Locator Strategies:

  • Using CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.ssRegistrationField.ssEmailTextboxField.ember-text-field.ember-view[id^='ember'][type='email']"))).send_keys("Max")
    
  • Using XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='ssRegistrationField ssEmailTextboxField ember-text-field ember-view' and starts-with(@id,'ember')][@type='email']"))).send_keys("Max")
    
  • Note : 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
    

References

You can find a couple of relevant detailed discussions in:

undetected Selenium
  • 183,867
  • 41
  • 278
  • 352