我无法让硒在网站上找到一个元素(确切地说是微闪)。理想情况下,我希望驱动程序将键发送到输入字段,但是硒由于某种原因无法找到它。
我已经尝试通过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"
>
答案 0 :(得分:1)
尝试其中之一
By.CssSelector("[id*='contestant']")
By.CssSelector("[ng-model='contestantState.form.name']")
By.CssSelector("[name='name']")
答案 1 :(得分:0)
使用WebDriverWait
处理网页上的动态元素。请尝试以下代码。
如果此代码不起作用,请检查您的输入元素是否在任何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")
答案 2 :(得分:0)
要将字符序列发送到所需元素,因为该元素是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")