当前位置: 代码迷 >> python >> 我想点击
  • 网页左侧导航中的项目,使用 Python 和 Selenium webdriver 来定位它
  •   详细解决方案

    我想点击
  • 网页左侧导航中的项目,使用 Python 和 Selenium webdriver 来定位它
  • 热度:42   发布时间:2023-07-16 11:18:10.0

    我想点击左侧导航中的MAKE UP ,请找到网页的附件图片和链接

    我目前正在使用下面的代码来点击项目,但没有得到任何结果。我可以通过类名('has-sub')访问元素。我什至可以打印它们但不能点击它们

    obc = driver.find_elements_by_class_name('has-sub')
    for ea in obc:
       if ea.text == "Makeup":
        ea.click()
    

    只是为了下面的更多信息是网页的html代码

    <li class="has-sub" style="height: 38px;">
        <a href="#">Makeup</a>  
        <ul class="submenu" style="top: 0px;">
    
            <li>
                <a id="SBN_facet_Face" href="http://shop.davidjones.com.au/djs/en/davidjones/beauty/face" escapexml="false">Face </a>
            </li>
    
            <li>
                <a id="SBN_facet_Lips" href="http://shop.davidjones.com.au/djs/en/davidjones/beauty/lips" escapexml="false">Lips </a>
            </li>
    
            <li>
                <a id="SBN_facet_Eyes" href="http://shop.davidjones.com.au/djs/en/davidjones/beauty/eyes" escapexml="false">Eyes </a>
            </li>
    
            <li>
                <a id="SBN_facet_Nails" href="http://shop.davidjones.com.au/djs/en/davidjones/beauty/nails" escapexml="false">Nails </a>
            </li>
    
            <li>
                <a id="SBN_facet_Brushes &amp; Tools" href="http://shop.davidjones.com.au/djs/en/davidjones/beauty/beauty-brushes-accessories" escapexml="false">Brushes &amp; Tools </a>
            </li>
    
            <li>
                <a id="SBN_facet_Makeup" href="http://shop.davidjones.com.au/djs/en/davidjones/beauty/beauty-makeup" escapexml="false">All Makeup </a>
            </li>
    
        </ul>
    </li>`enter code here`
    

    任何帮助将不胜感激 。

    我可以使用下面的代码点击。

    wait = WebDriverWait(driver, 10)
    elements  = wait.until(EC.presence_of_all_elements_located((By.XPATH, "//li[@class='has-sub']")))
    for element in elements:
        if element.find_elements_by_link_text("Makeup"):
            element.click()
            break
    innerElements  = wait.until(EC.presence_of_all_elements_located((By.XPATH, "//li[@class='has-sub open']/ul/li")))
    for innerElement in innerElements:
        if innerElement.text == "Face":
            innerElement.click()
            break
    

    希望这会帮助你。

    这里的问题是,您正在尝试单击

  • 元素,而文本在元素下。 所以你需要做的是:

     obc = driver.find_elements_by_xpath('//li[@class='has-sub']/a[contains(text(), 'Makeup')]')

    我在您的网页上测试了 xpath 并且它有效。

  • 根据您提供的HTML ,要单击左侧导航窗格中的MAKE UP ,您可以使用以下代码块:

    obc = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[@class='aside all-open']/ul//li[@class='has-sub']/a")))
    for ea in obc:
        if 'Makeup' in ea.get_attribute("innerHTML"):
            ea.click()
            break
    
      相关解决方案