2 回答

TA貢獻(xiàn)1828條經(jīng)驗 獲得超3個贊
您需要修改定位器,如果要獲取所有元素,則需要使用driver.findElements()方法。
試試下面的 XPath 定位器,它將識別表的行數(shù):
String xPath = "//table[@id='tblInterday']/tbody//tr";
你可以像這樣得到行的大小:
int rows = driver.findElements(By.xpath(xPath)).size();
您可以使用循環(huán)遍歷整行,例如for如下循環(huán):
for(int i=1;i<rows;i++) {
}
下面的 XPath 將根據(jù)行索引號標(biāo)識每行中的列數(shù):
String xPath = "//table[@id='tblInterday']/tbody//tr[row index number]/td";
由于行數(shù)很多,您可以將行索引傳遞給上面的 XPath,如下所示:
for(int i=1;i<rows;i++) {
driver.findElements(By.xpath(xPath+"["+i+"]/td"));
}
當(dāng)我們使用driver.findElements()上面的方法時,它將保存所有列元素,我們可以循環(huán)并打印每個元素,如下所示:
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();
}
}
}
我希望它有幫助...

TA貢獻(xiàn)1824條經(jīng)驗 獲得超5個贊
在 DOM 中發(fā)布元素(標(biāo)簽之間的全部內(nèi)容)。
如果它是標(biāo)簽內(nèi)的文本,您的代碼將起作用,但如果文本位于 value 參數(shù)內(nèi),則需要 getProperty("value") 才能從元素中提取它。
添加回答
舉報