【发布时间】:2017-01-18 21:01:35
【问题描述】:
我创建了一个程序来使用 HtmlUnit 访问 Web 应用程序。登录应用程序后,我想逐个打开表格中列出的工作,然后转到下一页。不幸的是,该表没有 id 属性,我可以在 HtmlTable 变量的初始化期间使用它来 getElementById。
所以,我决定使用 getByXPath 函数并传递一条路径,系统可以通过该路径识别我所指的表并让我继续前进。我在这里面临的问题是我想要访问的表格嵌套在一堆 div 和一个表格标签下。从层次上讲,我试图访问的表位于下面提到的时尚下
HTML -> 正文 -> 12 个 div -> 表格 -> tbody ->tr -> td -> 10 个 div -> 表格
我无法在 Xpath 函数中从中间开始。所以,我通过以下方式传入了整个路径:
for(int i=0;i<2;i++) {
final HtmlTable table = (HtmlTable) page2.getByXPath("//html/body/div/div/div/div/div/div/div/div/div/div/div/div/table/tbody/tr/td/div/div[@id='idName']/div/div/div[@class='className']/div/div/div/div/div/table[@class='TableClass']").get(i);
System.out.println("Printing table: " + table.asText());
}
我得到的错误如下:
线程“main”java.lang.IndexOutOfBoundsException 中的异常:索引:0,大小:0
由于该表隐藏在大量其他标签下,我不知道如何获得有效的访问方式。
现在,我尝试使用 getChildNodes 函数来获取页面中存在的所有节点并单独列出 Table 节点。代码sn-p在这里:
List list = page2.getChildNodes();
int k = 0;
while(list.iterator() != null)
{
HtmlElement anElement = (HtmlElement) list.get(k);
if(anElement instanceof HtmlTable)
{
System.out.println("Hello :" +anElement.asText());
}
k = k + 1;
}
这里我有一个用于 HtmlElement 强制转换操作的 ClassCastException。
【问题讨论】:
-
我确信即使没有
id,也有足够的方法来选择您的表。显示此表的HTML -
表格的html是:“我无法在 Xpath 函数中从中间开始。”,为什么?您是否尝试使用浏览器工具测试 XPath?