Python + Selenium-无法单击元素

时间:2019-02-05 12:39:09

标签: python selenium selenium-webdriver xpath webdriver

我的页面上有一个用于订单搜索结果的下拉列表:

<ul class="chzn-results" style="overflow-x: hidden;">
    <li id="selZB4_chzn_o_0" class="active-result result-selected" style=""> by popular </li>
    <li id="selZB4_chzn_o_1" class="active-result" style=""> price (from cheap) </li>
    <li id="selZB4_chzn_o_2" class="active-result" style=""> price (from expensive) </li>
    <li id="selZB4_chzn_o_3" class="active-result result-last" style=""> discount </li>
</ul>

我点击了以打开此下拉列表:

action = ActionChains(driver)
order = driver.find_element_by_xpath('/html/body/div[2]/div[1]/div/div[5]/div[2]/div[3]/div/div/div[2]/div[2]/span[2]/span[1]')
action.move_to_element(order).click().perform()

下拉列表打开。接下来,我想选择“廉价”来订购页面上的对象,但是Selenium返回AttributeError:'list'对象没有属性'id'。

我尝试了类似的其他方式:

from_cheap = driver.find_elements_by_xpath("//[@id="selZB4_chzn_o_1"]")
action.move_to_element(from_cheap).click().perform()

或通过CSS选择器。或按ID,但仍然没有点击。 我的错是什么?

1 个答案:

答案 0 :(得分:2)

所需元素是动态元素,因此要定位该元素,必须使 WebDriverWait 成为可点击的 元素,并且可以使用以下任一解决方案:

  • XPATH 1

    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//ul[@class='chzn-results']//li[@class='active-result' and contains(., 'from cheap')]"))).click()
    
  • XPATH 2

    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//ul[@class='chzn-results']//li[@class='active-result' and normalize-space()='price (from cheap)']"))).click()