有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何以Xpath形式从产品的类别列表页面中提取文本,并将其添加到Selenium Java中的列表中

我试图在一个类别列表页面上选择每个产品的名称,如下所示(例如:https://www.prana.com/women/clothing/tops.html#page=1

我有一个for循环遍历Xpath,但它不断返回错误——“Xpath”是[objecttext],它应该是一个元素。这是正确的。我的问题是我如何获得文本?我已经找遍了,但似乎找不到正确的答案——这就是我现在的答案

List<WebElement> allElements = driver.findElements(By.xpath("//*[@id=\"root-wrapper\"]/div/div/div[3]/div/div[4]/div[2]/div[3]/ul/li[1]/a/h2/text()")); 
for(int i=0; i <allElements.size(); i++) {
   allElements = driver.findElements(By.xpath("//*[@id=\"root-wrapper\"]/div/div/div[3]/div/div[4]/div[2]/div[3]/ul/li["+i+"]/a/h2/text()")); 
}

System.out.println(Integer.toString(allElements.size()));
   for (WebElement element: allElements) {
      System.out.println((element).getText());

所以我希望它继续下去,直到不再有这些“元素”(文本),然后为我列出它们

任何帮助都将不胜感激

我确实在这里看到了与href类似的内容:iteration in product list of several pages with selenium java

我要看看我是否能用

driver.findElements(By.className(".product-name *then enter a blank variable here*" );

共 (2) 个答案

  1. # 1 楼答案

    您可以创建一个包含所需元素的列表,该列表包含所有元素的可见性的WebDriverWait,并在循环中提取所需的文本,您可以使用以下解决方案:

    • 代码块:

      driver.get("https://global.prana.com/women/clothing/tops.html#page=1");
      List<WebElement> allElements = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//h2[@class='product-name']")));
      for (WebElement element: allElements)
            System.out.println((element).getText());
      
    • 控制台输出:

      FILLARY TOP
      REMI WAFFLE PULLOVER
      SHEA WAFFLE HOODIE
      SHELTON TOP
      PRAIRIE GROVE SWEATER
      PERCY TOP
      CHARLEY TOP
      ASTER TUNIC
      ASTER TUNIC PLUS
      FOUNDATION TURTLENECK
      FOUNDATION V-NECK PLUS
      FOUNDATION WRAP
      COZY UP T-SHIRT
      FOUNDATION WRAP PLUS
      FOUNDATION LONG SLEEVE CREW
      FOUNDATION LONG SLEEVE TUNIC
      SEABORD LONG SLEEVE TOP
      SEABORD SHORT SLEEVE TOP
      FOUNDATION SHORT SLEEVE V-NECK
      BACALL TOP
      PUREST TANK
      AZUL TOP
      SHILOH TOP
      
  2. # 2 楼答案

    XPath中的text()用于匹配TextNode。除了TextNode,HTML中还有ElementNode和AttributeNode

    但对于selenium,它只能查找/返回ElementNode,您可以使用XPath中TextNode的显示文本来匹配您想要的ElementNode,但不能要求selenium返回TextNode

    因此,删除xpath末尾的text(),然后调用WebElementgetText()api来获取元素的文本