如何使用 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_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 中的文本发生变化,我们必须更改 [=] 中的定位器31=]Selenium-Python 绑定。
一个好的方法是:
- 利用
data-value
属性://li[@data-value = '2']
- 使用 ul 和 li 标签:
//ul[contains(@class, 'minBedOptions')/li[@data-value = '2']]
我是 运行 网络爬虫,我无法点击第三个元素。我不确定该怎么做,因为我尝试了谷歌搜索和 运行 几种类型的代码。
下面是 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_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 中的文本发生变化,我们必须更改 [=] 中的定位器31=]Selenium-Python 绑定。
一个好的方法是:
- 利用
data-value
属性://li[@data-value = '2']
- 使用 ul 和 li 标签:
//ul[contains(@class, 'minBedOptions')/li[@data-value = '2']]