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




Разместите элемент в 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();
}
}
}
Я надеюсь, что это помогает...