selenium 如何从html中提取所有文本的链接和其他属性?

fcipmucu  于 2022-12-04  发布在  其他
关注(0)|答案(2)|浏览(179)

注意,如果是单个元素,我可以提取,但我需要提取所有元素。
你好,我正在尝试使用Selenium和Java从一个页面的项目列表中提取文本和链接。我能够提取所有链接文本,但面临的问题是找出链接文本。html代码如下所示:

<div class="col-12">
        <a href="/category/agricultural-products-service">
                <img src="/assets/images/icon/1.jpg" alt="icon" class="img-fluid category_icon">
                    <h5 class="category_title">Agricultural </h5>
        </a>
 </div>
<div class="col-12">
        <a href="/category/products-service">
                <img src="/assets/images/icon/7.jpg" alt="icon" class="img-fluid category_icon">
                    <h5 class="category_title">Products</h5>
        </a>
 </div>

使用h5,我可以提取所有元素,但我需要提取这些元素的所有href

93ze6v8z

93ze6v8z1#

要从多个web元素中提取文本、链接或任何其他属性值,您需要将所有这些元素收集到一个列表中,然后遍历该列表,从每个web元素对象中提取所需的值。
如下所示:

List<WebElement> elements = driver.findElements(By.tagName("h5"));
for(WebElement element : elements){
    String value = element.getText();
    System.out.println(value);
}

这将为您提供所有链接

List<WebElement> links = driver.findElements(By.cssSelector(".top_cat a"));
for(WebElement link : links){
    String value = link.getAttribute("href");
    System.out.println(value);
}

在此特定页面上,结构为:
有几个由class="col-12 col-sm-6 col-md-4 border all_cat"元素定义的块。在每个这样的块中有几个链接和标题。每个aclass="col-12 col-sm-6 col-md-4 border all_cat"元素之下,标题在它的a元素之下。因此,这里提取链接和标题可以如下完成:

List<WebElement> blocks = driver.findElements(By.cssSelector(".all_cat"));
for(WebElement block : blocks){
    List<WebElement> links = block.findElements(By.xpath(".//a"));
    for(WebElement link : links){
        String linkValue = link.getAttribute("href");
        System.out.println("The link is " + linkValue);
        WebElement title = block.findElements(By.xpath(".//h5"));
        String titleValue = title.getText();
        System.out.println("The title is " + titleValue);
    }
}
mklgxw1f

mklgxw1f2#

所以,这是我的最终解决方案,我想做的是:

List<WebElement> blocks = driver.findElements(By.cssSelector(".all_cat"));
for (WebElement block : blocks) {
    WebElement link = block.findElement(By.xpath(".//a"));
    String linkValue = link.getAttribute("href");
    System.out.println(linkValue);
                
    WebElement title = block.findElement(By.xpath(".//h5"));
    String titleValue = title.getText();
    System.out.println(titleValue);
}

相关问题