2016-07-26 6 views
2

Ich versuche, auf die gesamte Liste der Daten von der linken Seite für die folgende URL zuzugreifen, aber keine richtige Kombination von Klassen und ID zu finden. Bitte helfen Sie. Unten ist mein Code.Selen-Code extrahiert keine Faccet-Daten von der Webseite

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

-Code

[![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] 

Antwort

1

Bitte versuchen dies:

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

Der Code, den Sie vorgeschlagen haben, gibt mir 9 Nullwerte und nicht die Ausgabe, nach der ich suche. –

1

Bitte Code unten verwenden, um alle Filter Artikel Kategorien zu bekommen in dieser Liste Ich habe die XPath verwendet Sie können jedoch die in Xpath verwendeten Klassen immer zu cssSelectors

ändern
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); 
      } 

    } 
+0

Der obige Code, den Sie geteilt haben, ist in der Lage, die Werte der Filter wie Farbe, Größe usw. zu erhalten. Aber ich suche nach den Werten in diesen Filtern wie nach Farbe, es sollte schwarz, blau und so weiter extrahieren. –

+0

// benutze diese Stelle von text() String b = a.getAttribute ("title"); – Nagaraju

+0

Liste faccet = driver.findElements (By.xpath ("// div [@ class = 'filtert jspScrollable'] // ul/li/a")); für innen gelistete Gegenstände @ Pankaj Sharma – Nagaraju

1

Selenium druckt die Werte nicht, wenn es denkt, dass diese Werte im Browser nicht sichtbar sind. Damit Sie alle Facetten und ihre Werte drucken können, möchten Sie möglicherweise vor dem Drucken zu jedem Element blättern.

Ich war in der Lage zu tun, was Sie beschreiben mit easytest Framework (https://github.com/codezombies/easytest) und mit dem Code unten.

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 
     }); 
    }); 
} 

}

Und hier ist der Ausgang für den Code.

 
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 
Verwandte Themen