Selenium代码不从网页中提取faccet数据

时间:2016-07-26 09:44:34

标签: java selenium

我正在尝试从左侧访问以下URL的所有数据列表,但无法找到类和ID的正确组合。请帮忙。以下是我的代码。

URL:http://www.topshop.com/en/tsuk/category/clothing-427/jackets-coats-2390889/N-86tZdgl?No=0&Nrpp=20&siteId=%2F12556

代码

[![public void f() {
        driver.get("http://www.topshop.com/en/tsuk/category/clothing-427/jackets-coats-2390889/N-86tZdgl?No=0&Nrpp=20&siteId=%2F12556");
        List<WebElement> faccet = driver.findElements(By.className("filter_wrapper").className("ce3_sleeve_type").tagName("li"));
        System.out.println(faccet.size());
        for(WebElement a : faccet)
        {
        String b = a.getText();
        System.out.println(b);
        }  
  }][1]][1]

3 个答案:

答案 0 :(得分:1)

请试试这个:

List<WebElement> faccet = driver.findElements(By.CssSelector("div[class='filter_wrapper'] div div span");

答案 1 :(得分:1)

请使用以下代码获取该列表中的所有过滤条目类别 我已经使用了XPath,但您始终可以将Xpath中使用的类更改为cssSelectors

 public void f() 
{
 List<WebElement> faccet = driver.findElements(By.xpath("//div[@class='filters jspScrollable']//div[@class='filter_group_label']/span[@class='lbl']"));
            System.out.println(faccet.size());
            for(WebElement a : faccet)
            {
            //to get the text of each element and get into view for reading 
              ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", a);          
              String b = a.getText();
             System.out.println(b);
             }

  }

答案 2 :(得分:1)

如果Selenium认为这些值在浏览器上不可见,则不会打印这些值。为了打印所有构面及其值,您可能希望在打印前滚动到每个元素。

我能够使用easytest框架(https://github.com/codezombies/easytest)和下面的代码执行您所描述的内容。

public class TopShopTest {

@Test
public void test() throws Exception {

    final EasyTestOptions options = new EasyTestOptions();
    options.setLogger(new NoOpLogger());
    try (EasyTest easy = new EasyTest(DriverType.CHROME, options)) {

        easy.start("http://www.topshop.com/en/tsuk/category/clothing-427/jackets-coats-2390889/N-86tZdgl?No=0&Nrpp=20&siteId=%2F12556");

        easy.newPage(page -> {
            this.openAndPrintValues(page, ".filter_group.ce3_sleeve_type");
            this.openAndPrintValues(page, ".filter_group.colour");
            this.openAndPrintValues(page, ".filter_group.size");
            this.openAndPrintValues(page, ".filter_group.prod_fit");
            this.openAndPrintValues(page, ".filter_group.ce3_jacket_style");
            this.openAndPrintValues(page, ".filter_group.ce3_fabric");
            this.openAndPrintValues(page, ".filter_group.ce3_collection");
            this.openAndPrintValues(page, ".filter_group.ce3_clothing_brands");
            this.openAndPrintValues(page, ".filter_group.accessories");
        });
    }
}

private void openAndPrintValues(final ActionablePage page, final String selector) {
    // open
    page.scrollTo(selector);
    page.click(selector);

    page.executeIn(selector + ":not(.collapsed)", container -> {

        // get facet heading
        final WebElement heading = container.getRaw(".filter_group_label span.lbl");
        page.scrollTo(heading);
        System.out.println("Choices under selector: " + heading.getText());

        // get facet lists
        container.executeIn("ul", list -> {
            list.wait((Predicate<WebDriver>) t -> list.getRawList("li.refinement:not(.disabled) span.lbl").size() > 0);;
            final List<WebElement> elements = list.getRawList("li.refinement:not(.disabled) span.lbl");
            // scroll to end of list, selenium will not display 'unseeen' elements
            page.scrollTo(elements.get(elements.size() - 1));

            // pring heading and list
            elements.stream().map(WebElement::getText).filter(StringUtils::isNotEmpty).forEach(System.out::println);
            System.out.println(); //extra space
        });
    });
}

}

以下是代码的输出。

Choices under selector: Sleeve Length
3/4 Sleeve 
Long Sleeve 
Sleeveless

Choices under selector: Colour
Purple
Red
White

Choices under selector: Size
10
12
14
16
XS
S
S/M
M
M/L
L
XL

Choices under selector: Fit
Regular
Petite
Tall
Maternity

Choices under selector: Jacket & Coat Style
Faux Fur Coats
Gilets
Kimono
Parkas
Shacket
Shearling Coats
Sleeveless Jackets
Smart Coats
Smart Jackets
Trench Coats & Macs
Wool Coats

Choices under selector: Fabric
Cord
Denim
Embroidered
Faux Fur
Faux Leather
Lace
Leather
Sequin
Suede
Velvet

Choices under selector: Collection
Boutique
Festival
Going Out
Sportswear
Unique
Workwear

Choices under selector: Clothing Brands
Adidas Originals
Glamorous
Glamorous Petites
Goldie

Choices under selector: Accessories
One Size