【问题标题】:Extracting texts from <li> items with selenium in Python在 Python 中使用 selenium 从 <li> 项中提取文本
【发布时间】:2020-01-12 08:22:10
【问题描述】:

我试图在嵌套的 ul-li 结构中的 /a 标记内获取文本。我找到了所有的“li”,但无法获取 a's 中的文本。

我正在使用 Python 3.7 和 Selenium webdriver 和 Firefox 驱动程序。

对应的HTML是:

[some HTML]

<ul class="dropdown-menu inner">
<!---->
    <li nya-bs-option="curso in ctrl.cursos group by curso.grupo" class="nya-bs-option first-in-group group-item">
        <span class="dropdown-header">Cursos em Destaque</span>
        <a tabindex="0">Important TEXT 1</a>
    </li>
    <!-- end nyaBsOption: curso in ctrl.cursos group by curso.grupo -->
    <li nya-bs-option="curso in ctrl.cursos group by curso.grupo" class="nya-bs-option group-item">
        <span class="dropdown-header">Cursos em Destaque</span>
        <a tabindex="0">Important TEXT 2</a>
    </li>
    <!-- end nyaBsOption: curso in ctrl.cursos group by curso.grupo -->
    <li nya-bs-option="curso in ctrl.cursos group by curso.grupo" class="nya-bs-option group-item">
        <span class="dropdown-header">Cursos em Destaque</span>
        <a tabindex="0">Important TEXT 3</a>
    </li>
    <!-- end nyaBsOption: curso in ctrl.cursos group by curso.grupo -->
    <li nya-bs-option="curso in ctrl.cursos group by curso.grupo" class="nya-bs-option group-item">
        <span class="dropdown-header">Cursos em Destaque</span>
        <a tabindex="0">Important TEXT4</a>
    </li>
                            [another 100 <li></li> similar blocks]                  .
                                                .
    <li class="no-search-result" placeholder="Curso">
        <span>Unimportant TEXT</span>
    </li>
</ul>

[more HTML]

我试过下面的代码:

cursos = browser.find_elements_by_xpath('//li[@nya-bs-option="curso in ctrl.cursos group by curso.grupo"]')
nome_curso = [curso.find_element_by_tag_name('a').text for curso in cursos]

我得到了包含正确数量项目的列表,但所有项目都 = ''。谁能帮我?谢谢。

【问题讨论】:

  • 看来代码应该没问题,如果可以的话,把网址贴出来。

标签: python selenium-webdriver xpath css-selectors webdriverwait


【解决方案1】:

看来你很接近了。提取文本,例如Important TEXT 1Important TEXT 2Important TEXT 3Important TEXT4等你要诱导WebDriverWait 获取所需的visibility_of_all_elements_located(),您可以使用以下任一Locator Strategies

  • 使用CSS_SELECTORget_attribute() 方法:

    print([my_elem.get_attribute("innerHTML") for my_elem in WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "ul.dropdown-menu.inner li.nya-bs-option a")))])
    
  • 使用XPATHtext 属性:

    print([my_elem.text for my_elem in WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.XPATH, "//ul[@class='dropdown-menu inner']//li[contains(@class, 'nya-bs-option')]//a")))])
    
  • 注意:您必须添加以下导入:

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

可以在How to retrieve the title attribute through Selenium using Python?找到相关讨论


结尾

根据文档:

【讨论】:

  • 非常感谢,DebanjanB!我使用了 get_attribute('innerHTML') 并且一切正常!最好的,格尔森。
猜你喜欢
  • 2021-07-13
  • 2022-11-16
  • 1970-01-01
  • 1970-01-01
  • 2016-01-11
  • 2021-09-08
  • 2020-09-24
  • 2022-01-27
  • 1970-01-01
相关资源
最近更新 更多