如何使用 selenium 单击此列表中的第三个元素?我已经尝试了一切,但没有任何效果

How can I click on the third element in this list using selenium? I have tried everything and nothing works

我是 运行 网络爬虫,我无法点击第三个元素。我不确定该怎么做,因为我尝试了谷歌搜索和 运行 几种类型的代码。

下面是 html 和我的代码的截图。我需要单击列表中的第三个元素。它在屏幕截图中突出显示。我不确定如何处理 css 和数据绑定

here is the code for max bed options. I also need to get the 2 beds just like we did for min bed options

谢谢!!

根据图片,以下应该有效:

driver.find_element_by_xpath('//span[@id="bedsMinMaxRangeControl"]//li[@data-value="2"]').click()

但我们需要查看整个页面HTML才能给出正确答案。
也不要忘记在那里使用延迟/等待。
UPD
对于新问题,代码将是:

driver.find_element_by_xpath('//span[@id="bedsMinMaxRangeControl"]//ul[contains(@class,"maxBedOptions")]//li[@data-value="2"]').click()

在这里你还应该使用适当的 data-value 值从 -1 到 3

您可以将 css_selectordata-value 属性一起使用。

locator = ".dropdownContent .minBedOptions li[data-value='2']"
WebDriverWait(driver, 10).until((EC.element_to_be_clickable, (By.CSS_SELECTOR, locator))).click()

我用过 WebDriverWait 所以一定要导入它...

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC 

如果它只是一个使用 li 标签的列表,就像从共享快照中看到的那样,您可以将最简单的 xpath 写为:

//li[contains(text(), '2 Beds')]

并像这样使用它:

driver.find_element_by_xpath("//li[contains(text(), '2 Beds')]").click()

或者,如果您想将 xpath 与 WebDriverWait 结合使用,请像这样使用它:

wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.XPATH, "//li[contains(text(), '2 Beds')]")))

导入:

from selenium.webdriver.support import expected_conditions as EC

现在让我们谈谈何时不想依赖 XPATH 中的 2 Beds 文本,因为如果 UI 中的文本发生变化,我们必须更改 [=] 中的定位器31=]Selenium-Python 绑定。

一个好的方法是:

  1. 利用 data-value 属性://li[@data-value = '2']
  2. 使用 ul 和 li 标签://ul[contains(@class, 'minBedOptions')/li[@data-value = '2']]