硒无法通过任何方法定位元素

时间:2019-04-23 07:13:50

标签: python selenium xpath css-selectors webdriverwait

我无法让硒在网站上找到一个元素(确切地说是微闪)。理想情况下,我希望驱动程序将键发送到输入字段,但是硒由于某种原因无法找到它。

我已经尝试通过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"
>

3 个答案:

答案 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")