代码之家  ›  专栏  ›  技术社区  ›  Mark H

从行项目列表中提取值

  •  1
  • Mark H  · 技术社区  · 7 年前

    我有一个“LI”(specificationItem)项目列表,需要提取其值。我需要的值在

    如何返回所有LI值并捕获这些值?

                    <div class="vehicle-features">
                        <h2 class="vehicle-features_header">Specification</h2>
    
    <div class="specificationList">
        <ul class="inner">
    
                    <li class="specificationItem">
                        <dl>
                            <dt class="icon">
                                <span id="Body_ContentPlaceHolderContent_ContentPlaceHolderContent_VehicleFeatures_FeatureList_FeatureText_0" class="odometer">Odometer</span>                                
                            </dt>
                            <dd class="value">
                            <span class="valueContent">11,984 miles</span>
                            </dd>
                        </dl>
                    </li>
    
                    <li class="specificationItem">
                        <dl>
                            <dt class="icon">
                                <span id="Body_ContentPlaceHolderContent_ContentPlaceHolderContent_VehicleFeatures_FeatureList_FeatureText_1" class="colourGroup">Colour Group</span>                                
                            </dt>
                            <dd class="value">
                            <span class="valueContent">Blue</span>
                            </dd>
                        </dl>
                    </li>
    
                    <li class="specificationItem">
                        <dl>
                            <dt class="icon">
                                <span id="Body_ContentPlaceHolderContent_ContentPlaceHolderContent_VehicleFeatures_FeatureList_FeatureText_2" class="fuelType">Fuel Type</span>                                
                            </dt>
                            <dd class="value">
                            <span class="valueContent">Diesel</span>
                            </dd>
                        </dl>
                    </li>
    
                    <li class="specificationItem">
                        <dl>
                            <dt class="icon">
                                <span id="Body_ContentPlaceHolderContent_ContentPlaceHolderContent_VehicleFeatures_FeatureList_FeatureText_3" class="transmission">Transmission</span>                                
                            </dt>
                            <dd class="value">
                            <span class="valueContent">Automatic</span>  
                            </dd>
                        </dl>
                    </li>
    
                    <li class="specificationItem">
                        <dl>
                            <dt class="icon">
                                <span id="Body_ContentPlaceHolderContent_ContentPlaceHolderContent_VehicleFeatures_FeatureList_FeatureText_4" class="bodyStyle">Body Style</span>                                
                            </dt>
                            <dd class="value">
                            <span class="valueContent">Hatchback</span>
                            </dd>
                        </dl>
                    </li>
    
                    <li class="specificationItem">
                        <dl>
                            <dt class="icon">
                                <span id="Body_ContentPlaceHolderContent_ContentPlaceHolderContent_VehicleFeatures_FeatureList_FeatureText_5" class="co2">CO2</span>                                
                            </dt>
                            <dd class="value">
                            <span class="valueContent">114 g/km</span>
                            </dd>
                        </dl>
                    </li>
    
                    <li class="specificationItem">
                        <dl>
                            <dt class="icon">
                                <span id="Body_ContentPlaceHolderContent_ContentPlaceHolderContent_VehicleFeatures_FeatureList_FeatureText_6" class="milesPerGallon">Miles Per Gallon</span>                                
                            </dt>
                            <dd class="value">
                            <span class="valueContent">64.2 mpg</span>         
                            </dd>
                        </dl>
                    </li>
    
                    <li class="specificationItem">
                        <dl>
                            <dt class="icon">
                                <span id="Body_ContentPlaceHolderContent_ContentPlaceHolderContent_VehicleFeatures_FeatureList_FeatureText_8" class="trimColour">Trim Colour</span>                                
                            </dt>
                            <dd class="value">
                            <span class="valueContent">black cloth</span>
                            </dd>
                        </dl>
                    </li>
        </ul>
    </div>
                    </div>
                </div>
            </div>
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   undetected Selenium    7 年前

    检索所有 规格项目 以及相应的 价值观 您可以使用以下代码块:

    List<String> specificationItems = new ArrayList<String>();
    List<String> specificationValues = new ArrayList<String>();
    List<WebElement> all_specificationItems = driver.findElements(By.xpath("//div[@class='specificationList']/ul[@class='inner']//li[@class='specificationItem']/dl/dt[@class='icon']/span[starts-with(@id,'Body_ContentPlaceHolderContent_ContentPlaceHolderContent_VehicleFeatures_FeatureList_FeatureText_')]"));
    List<WebElement> all_specificationValues = driver.findElements(By.xpath("//div[@class='specificationList']/ul[@class='inner']//li[@class='specificationItem']/dl//span[@class='valueContent']"));
    int size = all_specificationItems.size();
    for(WebElement ele:all_specificationItems)
        specificationItems.add(ele.getAttribute("innerHTML"));
    for(WebElement elem:all_specificationValues)
        specificationValues.add(elem.getAttribute("innerHTML"));
    for(int i=0;i<size;i++)
        System.out.println(specificationItems.get(i) + " has a value of " + specificationValues.get(i));
    
        2
  •  0
  •   Homewrecker    7 年前

    当您使用基于类名的css选择器并且有多个元素时,将返回元素列表。一旦有了这个列表,就可以对其进行迭代并检索值。像这样:

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

    上面的代码将用classname遍历所有WebElement 规格项目 并提取每个具有类名称的webelement 价值内容 。然后它将打印项目的内部文本。

    如果不关心li元素,则不必迭代li元素,可以执行以下操作:

    List<WebElement> elements = driver.findElements(By.cssSelector(".valueContent"));
    elements.forEach(System.out::println);