从这边https://en.wikipedia.org/wiki/China
我需要右侧的表的值。 我怎么能得到这个?
我存储了标题值,并尝试匹配表标题并检索列值,但显示错误。
List<String> search=new ArrayList<String>();
search.add("President");
search.add("Capital");
search.add("Dialing code");
search.add("Currency");
search.add("Population");
search.add("Official script");
for(int ii=0;ii<search.size();ii++) {
System.out.print("VALUE in search list ; "+search.get(ii));
for(int i=1;i<43;i++) {
String ss=driver.findElement(By.xpath("//*[@id=\"mw-content-text\"]/div/table[1]/tbody/tr["+i+"]/th[1]")).getText();
System.out.println(" VALUE in ss ; "+ss+" tr["+i+"]");
if(ss.toLowerCase().contains(search.get(ii).toLowerCase())) {
System.out.println("value matched");
//WebElement web= driver.findElement(By.xpath("//*[@id=\"mw-content-text\"]/div/table[1]/tbody/tr["+i+"]/td/a"));
//String title=web.getAttribute("title");
//System.out.println(title);
break;
}
}
}
我需要获取每一列的href工具提示值,例如President = Xi jinping,Capital = Beijing,official script =简体中文等。但显示错误。Exception in thread "main" org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="mw-content-text"]/div/table[1]/tbody/tr[2]/th[1]"}
答案 0 :(得分:0)
如果看到正在使用的xpath和给定页面的HTML代码,则该表的第一行(tr)具有表头(th),从第二行开始,表数据(td),但不是。这就是原因,您正在为第一个索引获取文本,并从第二个索引开始获取NoSuchElementException。您可以通过更改xpath的方式来处理表头所在的位置和表数据所在的位置。这将帮助您获取数据。
此xpath(// [@ id =“ mw-content-text”] / div / table [1] / tbody / tr)给出了55个匹配元素。如果应用// [@ id =“ mw-content-text”] / div / table [1] / tbody / tr [1],它将与第一个元素匹配,并且该元素的值为'th'。即(// [@ id =“ mw-content-text”] / div / table [1] / tbody / tr [1] / th [1])将起作用。但是对于第二个索引(// [@ id =“ mw-content-text”] / div / table [1] / tbody / tr [2]),我们使用td而不是th。有问题。
您可以根据上述说明更改xptah(我已经检查了HTML的相同性,并观察到某些具有th,而某些具有td。在这种情况下,根本不可能使用相同的xpath来获取所有元素数据。唯一可行的方法是单独编写xpath或将所有th和td分开并使用if条件运行循环。