我很难让selenium在网站上找到一个元素(准确地说是微光)。理想情况下,我希望驱动程序将密钥发送到输入字段,但selenium不会出于某种原因找到它。
我已经尝试通过ID,Xpath和名称进行定位。有关如何找到此元素的任何建议?
这是html:
<input
id="contestant[name]"
name="name"
ng-model-options="{ debounce: 300 }"
ng-model="contestantState.form.name"
ng-pattern=".*"
placeholder="Alice Smith" required=""
style="width: 246px"
type="text"
class="ng-empty
ng-invalid
ng-invalid-required
ng-valid-pattern
ng-dirty
ng-valid-parse
ng-touched"
>
尝试其中之一
By.CssSelector("[id*='contestant']")
By.CssSelector("[ng-model='contestantState.form.name']")
By.CssSelector("[name='name']")
使用WebDriverWait
处理Web页面上的动态元素。尝试以下代码。如果此代码不起作用,请检查您的输入元素是否在任何iframe内。
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium import webdriver
inputelement=WebDriverWait(driver,40).until(expected_conditions.element_to_be_clickable((By.ID,'contestant[name]')))
inputelement.send_keys("Apple")
要将字符序列发送到所需元素,因为该元素是Angular元素,因此您需要引导WebDriverWait以使元素可单击,并且您可以使用以下任一Locator Strategies:
CSS_SELECTOR
:
WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.ng-empty.ng-invalid.ng-invalid-required.ng-valid-pattern.ng-dirty.ng-valid-parse.ng-touched[id=\"contestant[name]\"]"))).send_keys("ml2017")
XPATH
:
WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='ng-empty ng-invalid ng-invalid-required ng-valid-pattern ng-dirty ng-valid-parse ng-touched' and @id=\"contestant[name]\"]"))).send_keys("ml2017")