问题
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.
回答1:
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.
回答2:
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:
- How to click on the ember.js enabled button using Selenium and Python
- Ember dropdown selenium xpath
来源:https://stackoverflow.com/questions/59276695/selenium-finding-element-based-on-ember