Как использовать Selenium Webdriver в Java для получения значений тегов - PullRequest
0 голосов
/ 06 февраля 2019

Я пытался использовать этот код для проведения эксперимента.Я попытался создать систему для получения данных с веб-сайта и использовать метод интерполяции Лагранжа для создания полинома.Я изучаю Selenium с Java, чтобы сделать это.Посмотрите на то, что я разработал.

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 голосов
/ 06 февраля 2019

Вам нужно изменить свой локатор, и если вы хотите извлечь все элементы, вам нужно использовать метод driver.findElements().

Попробуйте локатор XPath, приведенный ниже, который определит количество строк в этой таблице:

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

, и вы можете получить размер строк следующим образом:

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

, и вы можете перебирать целые строки, используя циклы, например for loop, как показано ниже:

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(), описанный выше, он будет содержать все элементы столбцов, мы можем выполнить цикл и распечатать каждый из них, как показано ниже:

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

Надеюсь, это поможет ...

0 голосов
/ 06 февраля 2019

Разместите элемент в DOM (все это между тегами).

Ваш код будет работать, если это текст внутри тега, но если текст находится, например, в параметре значения, вам понадобитсяgetProperty ("значение") для извлечения его из элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...