【发布时间】:2021-06-08 06:39:13
【问题描述】:
我正在运行一个网络爬虫,但我无法点击第三个元素。我不知道该怎么做,因为我尝试了谷歌搜索并运行了几种类型的代码。
下面是 html 和我的代码的屏幕截图。我需要单击列表中的第三个元素。它在屏幕截图中突出显示。我不确定如何处理 css 和数据绑定
谢谢!!
【问题讨论】:
-
欢迎来到 SO!请在您的问题中显示实际代码。 (不是图片)以及相关的 HTML。
我正在运行一个网络爬虫,但我无法点击第三个元素。我不知道该怎么做,因为我尝试了谷歌搜索并运行了几种类型的代码。
下面是 html 和我的代码的屏幕截图。我需要单击列表中的第三个元素。它在屏幕截图中突出显示。我不确定如何处理 css 和数据绑定
谢谢!!
【问题讨论】:
根据图片,以下应该可以工作:
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
【讨论】:
data-value="4"。很简单。
您可以将css_selector 与data-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 中的文本发生变化,我们必须在 Selenium-Python 中更改定位器绑定。
一个好的方法是:
data-value属性://li[@data-value = '2']
//ul[contains(@class, 'minBedOptions')/li[@data-value = '2']]
【讨论】: