Python 如何单击下拉列表选项?

Python 如何单击下拉列表选项?,python,python-3.x,selenium,webdriver,Python,Python 3.x,Selenium,Webdriver,我有一个按钮,当我点击它,我会得到一个下拉列表排序。我的问题是,我想单击此下拉列表中的一个选项,但我不知道如何引用它 我曾尝试将其作为一个列表框,并使用了“选择”模块,但因出现异常而失败。我的目的是能够参考此下拉列表中的任何选项。可能是HTML代码缺少唯一的href值吗 writeUplinkDropDown()的 您需要做的第一件事是打开下拉菜单。菜单打开后,您可以使用以下任何选择器示例单击您发布的任何选项: driver.find_elements_by_css_selector('a[

我有一个按钮,当我点击它,我会得到一个下拉列表排序。我的问题是,我想单击此下拉列表中的一个选项,但我不知道如何引用它

我曾尝试将其作为一个列表框,并使用了“选择”模块,但因出现异常而失败。我的目的是能够参考此下拉列表中的任何选项。可能是HTML代码缺少唯一的href值吗


writeUplinkDropDown()的

您需要做的第一件事是打开下拉菜单。菜单打开后,您可以使用以下任何选择器示例单击您发布的任何选项:

driver.find_elements_by_css_selector('a[onclick="SelectFrame(\"Uplink-200\")"]')
driver.find_elements_by_css_selector('a[onclick="SelectFrame(\"Port-19\")"]')
driver.find_elements_by_css_selector('a[onclick="SelectFrame(\"Port-20\")"]')

您需要做的第一件事是打开下拉菜单。菜单打开后,您可以使用以下任何选择器示例单击您发布的任何选项:

driver.find_elements_by_css_selector('a[onclick="SelectFrame(\"Uplink-200\")"]')
driver.find_elements_by_css_selector('a[onclick="SelectFrame(\"Port-19\")"]')
driver.find_elements_by_css_selector('a[onclick="SelectFrame(\"Port-20\")"]')

Selenium的
Select
类仅适用于本机
元素。因为您已经用自定义HTML实现了一个下拉列表,所以您将无法使用它

相反,为了在自定义下拉列表中选择一个选项,您需要执行实际用户可能执行的每个操作:

  • 单击打开下拉列表的按钮,然后
  • 单击所需选项的链接
注意:在页面上搜索元素时,始终尝试使用与实际用户相同的标准。真正的用户会寻找一些有意义的文本链接,例如,“200G”;他们不会在源代码中搜索特定的
onclick
属性。(此外,
onclick
属性是页面实现的一部分,而不是界面,因此不应依赖它,因为它随时可能发生变化。)

1.使用硒 Selenium没有提供查找按钮的显式方法,但您可以使用CSS或XPath:

驱动程序。通过css选择器(“输入[type='button'][value='Uplink'])查找元素
驱动程序。通过xpath(//input[@type='button'][@value='Uplink'])查找元素
要查找链接,Selenium方便地提供:

2.使用水豚(使用硒) 裸露的硒可能变化无常。该链接可能尚未在DOM中。或者它可能还不可见

透明地解决这些问题:

页面。单击按钮(“上行”)
页面。点击链接(“200G”)
页面。点击链接(“100G#1”)
页面。点击链接(“100G#2”)

Selenium的
Select
类仅适用于本机
元素。因为您已经用自定义HTML实现了一个下拉列表,所以您将无法使用它

相反,为了在自定义下拉列表中选择一个选项,您需要执行实际用户可能执行的每个操作:

  • 单击打开下拉列表的按钮,然后
  • 单击所需选项的链接
注意:在页面上搜索元素时,始终尝试使用与实际用户相同的标准。真正的用户会寻找一些有意义的文本链接,例如,“200G”;他们不会在源代码中搜索特定的
onclick
属性。(此外,
onclick
属性是页面实现的一部分,而不是界面,因此不应依赖它,因为它随时可能发生变化。)

1.使用硒 Selenium没有提供查找按钮的显式方法,但您可以使用CSS或XPath:

驱动程序。通过css选择器(“输入[type='button'][value='Uplink'])查找元素
驱动程序。通过xpath(//input[@type='button'][@value='Uplink'])查找元素
要查找链接,Selenium方便地提供:

2.使用水豚(使用硒) 裸露的硒可能变化无常。该链接可能尚未在DOM中。或者它可能还不可见

透明地解决这些问题:

页面。单击按钮(“上行”)
页面。点击链接(“200G”)
页面。点击链接(“100G#1”)
页面。点击链接(“100G#2”)

共享您的代码和exception@Monshe:您能否提供完整的页面源代码,以便我们可以检查下拉列表项的xpath层次结构?我在某些网站中遇到此问题,您无法单击下拉列表中的项,因为它会隐藏,首先必须单击打开下拉列表的“某个元素”。发布网站或代码部分共享您的代码和exception@Monshe:您能否提供完整的页面源代码,以便我们可以检查下拉列表项的xpath层次结构?我在某些网站中遇到此问题,您无法单击下拉列表中的项,因为它会隐藏,首先必须单击打开下拉列表的“某个元素”。发布网站或部分代码谢谢。我缺少的是行动的顺序。出于某种原因,我设法用xpath和CSS找到元素,但当我尝试使用它们的“click()”方法时,我得到了ElementNotInteractiableException(exception)。我现在唯一担心的是,我无法预测菜单的行为,在我能够单击其中的选项之前,它可以被关闭。你怎么认为?试试看。。重试几次就可以了?为什么你不能预测菜单的行为?你用什么代码打开它?在打开它和查找/单击链接之间,它会做什么?我不知道为什么。但是,当我最大化窗口时,菜单不会持续太长时间。我不太确定当浏览器没有最大化时(大多数时候是这样的),它的行为是否会有所不同。我单击“端口19”,然后出现菜单。由于此菜单位于我们不时刷新的面板上,因此刷新可能会使其无法显示,这听起来像是可用性问题。我建议您找出导致菜单消失的原因并停止,而不是将其编入测试。谢谢。我缺少的是行动的顺序。出于某种原因,我设法用th来定位元素