当前位置: 首页 > 知识库问答 >
问题:

无法定位元素:蟒蛇硒

丌官霖
2023-03-14

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

这就是我尝试过的

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: Message:找不到element://div[@ class = ' choosed-container choosed-container-single ']//a[@ class = ' choosed-single choosed-single-with-deselected choosed-default ']//input[@ class = ' choosed-search-input ']

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

ElementClickInterceptedException:消息:元素在点(228,398)不可点击,因为另一个元素会遮挡它

共有2个答案

秦跃
2023-03-14

为了单击< code>dropdown元素,需要引入< code>WebDriverWait()和< code > element _ to _ be _ clickable ()以及下面的< code>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
许学真
2023-03-14

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

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

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

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

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

select = browser.find_element_by_id("textfilter_scopes_chosen")
select.click()
 类似资料:
  • 我正在处理我的测试用例,其中包括将值发送到用于购买门票的输入字段。但是对于这种情况,selenium给出了无法定位元素错误,当我试图定位名为itemq_3728的输入字段时,问题是页面每次重新打开时都在更改输入字段的名称。 如何定位输入字段?我尝试了XPath,但不能达到目的,也不能相对于票证的名称编写它

  • 我想在selenium中找到我的文本字段,但我不知道如何找到(我第一次使用sellenium)。 我试过: 或者通过xPath和cssSseltor String在dev工具中由chrome生成。 请帮助我,我将感谢解释。 这是html:

  • 我试图从一个网站获得一些数据,但得到以下错误。它昨晚起作用了,但当我今天重新运行时,它突然无法定位元素。今天,我尝试了几乎我可以,但无法解决它。 工具和语言-Python、Selenium、Chrome、Chromedriver、AWS Cloud 9、EC2 错误消息 我试过下面的东西 增加和减少睡眠时间。增加和减少睡眠时间 提到各种网站仍然无法解决。我是python新手。

  • 嗨,我是一个相当新的硒。可以有人请建议如何定位和元素在iframe asi是得到错误下面。 带有Iframe标记的DOM按钮元素的屏幕截图 以前编写的代码

  • 我正在运行Ubuntu 18.04。 我使用mysql连接器-python连接Python到MySQL。 我使用的是Python 3.6.7,并且已经安装了mysql连接器-python。 我已经安装了mysql连接器-python-py3_8.0.13-1ubuntu18.10_all.deb. 在运行Python脚本时,mysql。连接器模块似乎加载正确,但脚本在碰到光标时失败。next()具

  • 假设我有一些资源,我想在用python编写的aws lambda中的不同请求之间共享。我应该如何实现这一点? 是否有“启动后”挂钩,或者我应该在第一次调用时惰性地创建资源?“延迟初始化”的缺点是,它意味着一些请求会随机变慢,因为您选择了一个消费者来承担启动成本。 此外…这些资源会在lambda可执行文件被“冻结”后幸存下来吗? 本页https://docs.aws.amazon.com/lambd