【问题标题】:Unable to locate element: python + selennium无法定位元素:python + selenium
【发布时间】:2019-12-30 09:15:38
【问题描述】:

我正在尝试点击如图所示的下拉菜单

这是我尝试过的

select = browser.find_element_by_xpath("//div[@class='chosen-container chosen-container-single']//a[@class='chosen-single chosen-single-with-deselect chosen-default']//input[@class='chosen-search-input']")
select.click()

但它给了我这个错误

NoSuchElementException:消息:无法定位元素: //div[@class='选择的容器 选择的容器单']//a[@class='选择的单 选择单取消选择 选择默认']//输入[@class='选择搜索输入']

我尝试了 Sameer 给出的解决方案,但现在它给了我这个错误

ElementClickInterceptedException:消息:元素不是 在点 (228,398) 处可点击,因为另一个元素遮住了它

【问题讨论】:

  • 在屏幕截图中,您有正确的简单 css 选择器作为输入:input.chosen-search-input!
  • @Sers 实际上还有 5 个下拉菜单具有相同的 css,所以它总是打开第一个
  • 可以分享网址吗?试试 WebDriverWait,看看@KunduK 的回答。

标签: python selenium xpath webdriver


【解决方案1】:

由于下拉列表包含唯一的文本,您可以通过在 xpath 中使用该文本来查找元素。

试试这个更新的 xpath
你的 xpath 应该是这样的:

select = browser.find_element_by_xpath("//div[@id='textfilter_scopes_chosen']")
select.click()

更新答案以通过更好的方法获取元素

由于元素存在唯一 ID,您应该使用它,因为 id 比 xpath 快。
您可以像这样使用 id:

select = browser.find_element_by_id("textfilter_scopes_chosen")
select.click()

【讨论】:

  • 我刚试过这个,但它给了我另一个错误。我会更新我的问题,以便你可以看到它
  • @KevinKurien 您遇到的错误是什么?你能检查一下 html 结构中是否存在 iframe 吗?
  • @KevinKurien 尝试更新的方式来点击元素并让我知道它是否有效
  • 我尝试了更新的答案,现在它没有显示任何错误,但它也没有点击下拉菜单。它只是加载页面并向下滚动到下拉菜单所在的位置
  • @KevinKurien 很好,尽管我已经更新了我的答案,因为该元素存在id,因此您应该通过 id 获取元素。我在更新的答案中提到了这种方法
【解决方案2】:

为了点击dropdown元素,引入WebDriverWait()和element_to_be_clickable()并跟随XPATH选项。

WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//div[@class='chosen-container chosen-container-single']//a[.//span[text()='Please select a scope']]"))).click()

您需要导入以下库

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

【讨论】:

  • webdriverwait 给出这个错误TimeoutException: Message:
  • @KevinKurien :这是我的错误,我在之前的回答中错过了最后一个括号 ]
猜你喜欢
  • 2017-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-30
  • 1970-01-01
  • 2020-08-02
  • 1970-01-01
相关资源
最近更新 更多