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

如何使用Selenium和Chrome在Python中单击下拉菜单

卫建义
2023-03-14

下拉菜单仅在鼠标悬停时出现。

我在网上尝试了很多解决方案,但运气不好:

  • https://qaquestions.wordpress.com/2012/03/05/selenium-web-driver-some-tricks-using-python/
  • Selenium无法通过xpath找到option表单元素
  • 使用selenium python从下拉选项中选择值

他们中的大多数假设标签名称是“选项”,而对我来说,超文本标记语言有点不同。超文本标记语言在下面,顶层memu是m1。我想点击下拉框m1_m7。

<li class="item first"></li>
<li class="item" style="z-index: 0;">
    <a id="m1" class="link " href="www.example.com"></a>
    <div class="slide" style="z-index: 11; display: none; overflow: hidden; height: 184px; width: 151px; top: 26px; left: 0px;">
    <ul class="vertical group level1" style="z-index: 11; display: block; top: -184px;">
    <li class="item first" style="z-index: 0;"></li>
    <li id="m1_m1" class="item separator " style="width: 151px;"></li>
    <li class="item" style="z-index: 0;"></li>
    <li id="m1_m3" class="item separator " style="width: 151px;"></li>
    <li class="item" style="z-index: 0;"></li>
    <li id="m1_m5" class="item separator " style="width: 151px;"></li>
    <li class="item" style="z-index: 0;"></li>
    <li id="m1_m7" class="item separator " style="width: 151px;"></li>
        <li style="z-index: 0;" class="item"><a style="width: 151px;" href="www.example.com/sub8" id="m1_m8" class="link "><span class="text expandLeft">Benefits</span></a><div style="z-index: 42; display: none; overflow: hidden; height: 105px; width: 206px; top: 0px; left: 151px;" class="slide">
                    <ul style="z-index: 42; display: block; left: -206px;" class="vertical group level2">
                        <li class="item first"><a style="width: 206px;" href="www.example.com/sub8_0" id="m1_m8_m0" class="link "><span class="text">Patient Safety - Joint Commission</span></a></li><li style="width: 206px;" id="m1_m8_m1" class="item separator "><span class="text"></span></li><li class="item"><a style="width: 206px;" href="www.example.com/sub8_1" id="dnn_INGENIMENU1__ctl0_m1_m8_m2" class="link "><span class="text">Perioperative Efficiency</span></a></li><li style="width: 206px;" id="dnn_INGENIMENU1__ctl0_m1_m8_m3" class="item separator "><span class="text"></span></li><li class="item"><a style="width: 206px;" href="www.example.com/sub8_3" id="m1_m8_m4" class="link "><span class="text">SCIP Compliance</span></a></li><li style="width: 206px;" id="m1_m8_m5" class="item separator "><span class="text"></span></li><li class="item last"><a style="width: 206px;" href="www.example.com/sub8_5/" id="m1_m8_m6" class="link "><span class="text">Time Out Electronic Checklists</span></a></li>
                    </ul>
                </div></li>
            <li id="m1_m9" class="item separator " style="width: 151px;"></li>
    <li class="item" style="z-index: 0;"></li>
    <li id="m1_m11" class="item separator " style="width: 151px;"></li>
    <li class="item last"></li>

欢迎提出任何建议,我们将予以答复。

共有1个答案

白赞
2023-03-14

看起来带有id=“m1_m5”li是列表项之间的分隔符,您可能需要它后面的下一个li元素,您可以使用xpath和后面的同级元素来获取它:

# open up the dropdown
dropdown = driver.find_element_by_css_selector("ul.level1")
dropdown.click()

# select element
item = dropdown.find_element_by_xpath("//li[@id='m1_m5']/following-sibling::li")
item.click()

更新(将鼠标悬停在菜单上,单击livedata的子菜单):

from selenium import webdriver
from selenium.webdriver import ActionChains

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


driver = webdriver.Firefox()
driver.get("http://www.livedata.com/")

wait = WebDriverWait(driver, 10)

healthcare = wait.until(EC.visibility_of_element_located((By.XPATH, "//li[@class='item' and a/span='Healthcare']")))
ActionChains(driver).move_to_element(healthcare).perform()

benefits = wait.until(EC.visibility_of_element_located((By.XPATH, "//li[@class='item']/a[span='Benefits']")))
ActionChains(driver).move_to_element(benefits).click().perform()

 类似资料:
  • 问题内容: 我需要从下拉菜单中选择一个元素。 例如: 1)首先,我必须单击它。我这样做: 2)之后,我必须选择一个好的元素,让我们说Mango。 我试图这样做,但是没有用。 问题答案: 除非你的点击触发了某种Ajax调用来填充列表,否则你实际上不需要执行该点击。 只需找到元素,然后枚举选项,然后选择所需的选项即可。 这是一个例子:

  • 我想从下面的列表中选择一个使用selenium的选项: 这里 但问题是没有列表可供选择。 在此输入图像说明 我到目前为止的代码: 需要帮助!!

  • 我试图创建一个自动的网络会话,我登录到一个网站,并从下拉框中选择一个选项。我能够使用硒进入页面,但我无法点击打开下拉菜单的栏,然后选择我想要的选项。这是页面的截图,它的超文本标记语言代码:[![在此输入图像描述][1]][1][![在此输入图像描述][2]][2] 我想单击下拉列表中的“降级性能”选项。我有点被困在这里,因为下拉列表的HTML与[this one][3]根本不相似(无法“选择”)。

  • 下面是正确的错误消息:Traceback(最近的调用):文件“C:/users\shishir sinha/pycharmprojects/australia/australia.py”,第33行,in driver.find_element_by_xpath(“.//[@id='ui-menu-0-1']”)。单击()文件“C:\users\shishir sinha\appdata\local

  • 问题内容: [Selenium和HTML上的新功能] 我想从网站上选择一个下拉菜单。该隐藏。我只是想通过或选择或从下拉或将其传递到变量,我会怎么做呢? 我使用了chrome中的inspect元素来确定以下两行是选择值所需的行。 我从chrome获取了xpath并尝试传递一个值,但没有成功: 上述元素的整个HTML 为: 先感谢您。 编辑: 我从下拉列表中单击的HTML,但未选择任何值: 编辑2:

  • 嗨,我正在尝试自动启动下拉菜单。默认情况下,它的可见性是隐藏的。将鼠标悬停在它上面时,它的可见性属性显示为可见。我可以单击下拉菜单,但是在单击下拉菜单后,我的selenium脚本不能从下拉菜单中选择值。 错误:线程"main"org.openqa.selenium.ElementNotVisibleException异常:无法单击元素 HTML代码段