【问题标题】:How can I extract a list of id's from a webpage?如何从网页中提取 id 列表?
【发布时间】:2021-04-29 13:57:48
【问题描述】:

我在尝试用 selenium 抓取的网页中有此代码:

 <h4 class="category" id="sc_14295">...</h4>
 <h4 class="category" id="sc_14292">...</h4>
 <h4 class="category" id="sc_14291">...</h4>
 <h4 class="category" id="sc_14299">...</h4>

我试图实现这样的方法(我在 SO 上找到的)来获取至少一个 id:

String id = driver.findElement(By.xpath("//div[@class='category']")).getAttribute("id");

这样:

String id = driver.findElement(By.xpath("//h4[@class='category']")).getAttribute("id");

它不起作用。我想我应该使用findElements(),但它不能有getAtttribute。如何提取所有 id 的列表? 谢谢。

【问题讨论】:

    标签: java selenium xpath css-selectors java-stream


    【解决方案1】:

    编辑##

    没有看到java标签,但过程是一样的。


    这样得到一个元素就可以直接获取id了:

    driver.find_element_by_xpath("//h4[@class = 'category']").get_attribute("id")   
    

    这会得到多个元素,但你必须循环它们以获取每个元素的 id:

    driver.find_elements_by_xpath("//h4[@class = 'category']"):
    

    示例

    from selenium import webdriver
    driver = webdriver.Chrome('C:\Program Files\ChromeDriver\chromedriver.exe')
    
    html_content = """
    <h4 class="category" id="sc_14295">...</h4>
     <h4 class="category" id="sc_14292">...</h4>
     <h4 class="category" id="sc_14291">...</h4>
     <h4 class="category" id="sc_14299">...</h4>
    """
    
    driver.get("data:text/html;charset=utf-8,{html_content}".format(html_content=html_content))
    
    
    for element in driver.find_elements_by_xpath("//h4[@class = 'category']"):
            print(element.get_attribute("id"))
    
    driver.close()
    

    输出

    sc_14295
    sc_14292
    sc_14291
    sc_14299
    

    【讨论】:

      【解决方案2】:

      要打印 id 元素的 List 属性,您需要将 WebDriverWait 诱导为 visibilityOfAllElementsLocatedBy(),您可以使用 Java8 stream()map() 可以使用以下任一Locator Strategies

      • cssSelector:

        System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("h4.category"))).stream().map(element->element.getAttribute("id")).collect(Collectors.toList()));
        
      • xpath:

        System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//h4[@class='category']"))).stream().map(element->element.getAttribute("id")).collect(Collectors.toList()));
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多