如何在Java中使用Selenium Webdriver获取标签值

时间:2019-02-06 12:07:24

标签: java selenium selenium-webdriver

我尝试使用此代码进行实验。我试图制作一个从网站获取数据并使用lagrange插值方法创建多项式的系统。我正在用Java学习Selenium来做到这一点。看看我的开发成果。

package com.gustavo.seleniumTest;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class seleniumTest {

public static void main(String[] args) {

    System.setProperty("webdriver.gecko.driver", "/home/gustavo/geckodriver");
    WebDriver driver = new FirefoxDriver();

    String valor;

    driver.get("http://cotacoes.economia.uol.com.br/acao/cotacoes-historicas.html?codigo=PETR4.SA&size=200&page=1&period=");
    valor = driver.findElement(By.xpath(".//*[@class='odd']")).getText();
    System.out.println(valor);
}

注意:我正在使用linux和Firefox。

2 个答案:

答案 0 :(得分:1)

您需要修改定位器,如果要获取所有元素,则需要使用driver.findElements()方法。

请尝试下面的XPath定位器,该定位器将标识表具有的行数:

String xPath = "//table[@id='tblInterday']/tbody//tr";

,您可以像这样获得行的大小:

int rows = driver.findElements(By.xpath(xPath)).size();

,您可以使用循环遍历整行,例如for循环,如下所示:

for(int i=1;i<rows;i++) {

}

下面的XPath将根据行索引号来标识每行中的列数:

String xPath = "//table[@id='tblInterday']/tbody//tr[row index number]/td";

由于有很多行,因此可以将行索引传递给上述XPath,如下所示:

for(int i=1;i<rows;i++) {
    driver.findElements(By.xpath(xPath+"["+i+"]/td"));
}

由于我们使用上面的driver.findElements()方法,它将保存所有的column元素,我们可以像下面那样遍历并打印每个列元素:

for(WebElement element : driver.findElements(By.xpath(xPath+"["+i+"]/td"))) {
    System.out.print(element.getText()+"\t");
}

替换

driver.findElements(By.xpath(xPath+"["+i+"]/td")).forEach(e -> System.out.print(e.getText()+"\t"));

使用

for(WebElement element : driver.findElements(By.xpath(xPath+"["+i+"]/td"))) {
        System.out.print(element.getText()+"\t");
    }

如果要正常打印。

下面是使用Java 8的全部代码:

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class SeleniumTest {

    public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver", "C:\\NotBackedUp\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();

        driver.get("http://cotacoes.economia.uol.com.br/acao/cotacoes-historicas.html?codigo=PETR4.SA&size=200&page=1&period=");
        String xPath = "//table[@id='tblInterday']/tbody//tr";
        int rows = driver.findElements(By.xpath(xPath)).size();
        for(int i=1;i<rows;i++) {
            driver.findElements(By.xpath(xPath+"["+i+"]/td")).forEach(e -> System.out.print(e.getText()+"\t"));
            System.out.println();
        }
    }
}

希望对您有帮助...

答案 1 :(得分:0)

将元素发布到DOM中(标签之间的整个内容)。

如果代码是标记中的文本,则您的代码将起作用,但是例如,如果文本在value参数内部,则需要getProperty(“ value”)才能从元素中提取代码。