【问题标题】:How to click on drop down menu in Python using Selenium and Chrome如何使用 Selenium 和 Chrome 在 Python 中单击下拉菜单
【发布时间】:2015-06-13 21:18:25
【问题描述】:

只有当您将鼠标悬停在上方时才会出现下拉菜单。

我在网上尝试了很多解决方案都没有成功:

他们中的大多数人认为标签名称是“选项”,而对我来说,HTML 有点不同。 HTML在下面,顶层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>

欢迎提出任何建议。

【问题讨论】:

    标签: python html selenium selenium-webdriver


    【解决方案1】:

    看起来liid="m1_m5" 是列表项之间的分隔符,您可能需要在它之后的下一个li 元素,您可以使用xpath 和following-sibling 获得它:

    # 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()
    

    【讨论】:

    • 非常感谢您的及时回复。也许我没有说得很清楚。我想将鼠标悬停在下拉菜单上,然后单击我想要的菜单,而不是单击顶级菜单。
    • @Julia 它是一个公共站点吗?我有机会看到它并尝试复制吗?
    • 非常感谢。是公共网站。 www.livedata.com/。我想要做的是将鼠标悬停在“医疗保健”上,然后点击“福利”。
    • 你太棒了!它与 Firefox 一样具有魅力。但是,我正在使用 Chrome 执行此操作,结果很糟糕。 Firefox 和 Chrome 的功能有什么不同吗?我用 chrome 尝试了相同的代码。它报告错误:selenium.common.exceptions.TimeoutException: Message:
    • @Julia 谢谢。行为是否一致?您是否正在执行相同的确切代码? (我已经多次尝试使用 Chrome ......没有错误)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    相关资源
    最近更新 更多