Как использовать Selenium Webdriver в Java для получения значений тегов

Я попытался использовать этот код для эксперимента. Я попытался создать систему для получения данных с веб-сайта и использования метода интерполяции Лагранжа для создания многочлена. Я изучаю 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.

...получить данные..., какие именно данные вы пытаетесь извлечь? Является ли создание/использование метод интерполяции Лагранжа для создания многочлена частью этого вопроса?
undetected Selenium 06.02.2019 13:49
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
624
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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

Ответ принят как подходящий

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

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

Я надеюсь, что это помогает...

Другие вопросы по теме