当前位置: 首页 > 知识库问答 >
问题:

带Java的WebDriver-无法使用WebDriver获取所有文本

陶鸿畴
2023-03-14

我无法在这个网站上找到所有的文字——https://niftygateway.com/marketplace

使用这个简单的代码-

String iterativeXpath = "(//*[@id='root']/div/div[2]/div[2]/div/div[2]/div[2]/div[1]/div/div)";
        iterativeXpath = iterativeXpath.substring(0, iterativeXpath.length()-1);
        WebDriverWait wait = new WebDriverWait(driver, 15);
        for(int i = 1; i <=20; i++){
            wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(iterativeXpath+"["+i+"])")));
           System.out.println(driver.findElement(By.xpath(iterativeXpath+"["+i+"])")).getText());
        }

共有3个答案

姜嘉赐
2023-03-14

问题出在XPath上。这是产品名称文本的XPath。这将为您提供具有产品名称的所有元素。那么只有您可以使用getText()方法。

//div[@class='MuiPaper-root MuiCard-root sc-Axmtr hvJMgY jss413 MuiPaper-elevation0 MuiPaper-rounded']/div/p[1]

使用这种技术来获得你想要的所有文本。

陈寒
2023-03-14

要等待列表,可以使用AllelementsLocatedby的可见性。

以及div.MuiCardContent-root。jss414选择器看起来更好:

driver.get("https://niftygateway.com/marketplace");
WebDriverWait wait = new WebDriverWait(driver, 20);
List<WebElement> elements = wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("div.MuiCardContent-root.jss414")));

for(WebElement element: elements) {
    System.out.println(element.getText());
}
司英彦
2023-03-14

获取此网站上的所有文本https://niftygateway.com/marketplace您可以使用以下定位器策略:

>

  • 使用cssSelector:

    driver.get("https://niftygateway.com/marketplace");
    System.out.println(driver.findElements(By.cssSelector("div.MuiCardContent-root")).stream().map(element->element.getText()).collect(Collectors.toList())); 
    

    理想情况下,您需要诱导WebDriverWait以实现AllelementsLocatedBy()的可见性,并且您可以使用以下定位器策略:

    >

  • 使用xpath:

    driver.get("https://niftygateway.com/marketplace");
    System.out.println(new WebDriverWait(driver, 30).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//div[contains(@class, 'MuiCardContent-root')]"))).stream().map(element->element.getText()).collect(Collectors.toList()));
    

    控制台输出:

    [ATLAS #2/21
    Symbiocene Mythologica
    $1,333.00, The Flipper #86/99
    The Title by Pak
    Make Offer, A Trebled Man #7/20
    Select Works by Alotta Money
    $1,850.00, UNISWAP #164/261
    Banned From The Internet Open Edition by Slime Sunday
    $725.00, Peng - Shiny #5/5
    Crystal Pops - Winter Edition by Goldweard
    $1,500.00, Gucci Ghost Aqua Pink #17/20
    Nifty Ghost Collection by Trevor Andrew
    $2,500.00, Entangled #7/15
    Tranquility by Andreas Wannerstedt
    $333.33, The Day I Decided to Fly #72/268
    Growing Up...I'm Scared Open Edition by FEWOCiOUS
    $413.00, Extrusion #447/457
    The Collision by Pak x Trevor Jones
    Make Offer, A Trebled Man #13/20
    Select Works by Alotta Money
    $1,888.88, The Square #5/6
    The Japanese Garden by Six n Five
    $2,500.00, The Last Stand of the Nation State
    Open Edition by Slimesunday
    $1,325.00, Kikai Ningyou #16/20
    Twisted Vacancy Edition
    Not Accepting Offers, Extrusion #63/457
    The Collision by Pak x Trevor Jones
    Not Accepting Offers, The Sprite
    Metamorphosis Open Edition By Metageist
    $178.88, Inu - Shiny #15/15
    Crystal Pops Asia Edition
    $358.88, Pandy - Shiny #14/40
    Crystal Pops Asia Edition
    $228.88, Peng #24/30
    Crystal Pops - Winter Edition by Goldweard
    $288.88, Tiggz - Shiny #39/75
    Crystal Pops Asia Edition
    $125.88, A Trebled Man #20/20
    Select Works by Alotta Money
    $2,500.00]
    

  •  类似资料:
    • 我正在使用下面的一段代码来获取某个特定定位器的文本。 这将返回字符串值,但只有在IE浏览器中,它才在其他浏览器(即Firefox和chrome)中失败并工作。 我面临这个问题: 组织。openqa。硒。WebDriverException:无法获取元素文本(警告:服务器未提供任何堆栈跟踪信息) 请帮我解决这个问题,IE浏览器中的这个异常也非常不一致,有时它通过了,有时失败了相同的代码。

    • 问题内容: 我想使用Selenium从DOM中提取一些信息。我正在使用C#WebDriver。 查看IWebElement接口,您可以轻松提取给定的属性。但是,我想提取一个元素的所有属性而无需事先知道它们的名称。 必须有一些简单的方法来执行此操作,因为如果您知道属性名称,则可以使用一种方法来获取属性值。 一个例子: 希望我缺少明显的东西。 提前致谢! 问题答案: JavaScript中的属性将返回

    • 我想用Selenium从DOM中提取一些信息。我正在使用C#WebDriver。 查看IWebElement接口,您可以轻松提取给定的属性。然而,我想提取一个元素的所有属性,而不需要事先知道它们的名称。 必须有一些简单的方法来实现这一点,因为有一种方法可以获取属性值,如果您知道它的名称。 例如: 希望我错过了一些明显的东西。 提前感谢!

    • 我正在尝试使用webdriver从上面的html代码中获取动态跨度文本,但得到的是: org.openqa.selenium.nosuchelementException:找不到元素:{“method”:“id”,“selector”:“MathQ2”} 我需要从span id“MathQ2”获取文本:“6+4=” 此文本“6+4=”在每次刷新页面或加载新页面时都在更改 我尝试过xpath、id、

    • 我的代码如下所示: 我也尝试过在选择器上执行点击操作,或者刷新页面,但这些操作都不起作用。我猜这个网页上有一些Javascript? 提前道谢! --Java version 7 Selenium version 2

    • 问题内容: 有一个具有子元素的元素,那些子元素又具有子元素,依此类推。我想获取所有作为该元素后代的元素。谢谢。 问题答案: 试试这个: (Java) (C#)