HtmlUnit Library讓我們可以利用Java模擬瀏覽器功能來測試網頁,而在這邊主要是針對如果
我們要走訪Html table,取得tr -> td的data,在table沒有設定id的情形下可以怎麼處理。
首先假設我們取得了該頁面的HtmlPage object,而我們要get table的Dom結構如下:
如果table有設id值的話,您就可以透過HtmlTable tableobj = page.getHtmlElementById("table1");
來得到table object,即可以利用HtmlTable定義的method,如官方說明文件提供的範例,如下
但我們要存取的table既沒有設定id,且我們要針對的為巢狀table下的第二個table資料,
回歸一個page能夠透過getElementByid(HtmlPage class定義的method)取得element's object,
當然也可以利用getElementsByTagName針對特定tag,但比較不方便的是沒有table專用的
getRows(), getCells()來用了,但也還好,利用下面的幾行code我們也可以得到。
tablelist為一集合List,假設這個頁面只有兩個<table>tag,那麼我們可以想像內層的table即為
第二個index,即1,因此我們表示tablelist.get(1)為第二個table,再來就是直覺的利用
getChildren(),來走訪當下element (table)的children elements,至於怎麼走訪,相信常用HashMap
的人應該蠻熟練的!在此就不多加撰述!
我們要走訪Html table,取得tr -> td的data,在table沒有設定id的情形下可以怎麼處理。
首先假設我們取得了該頁面的HtmlPage object,而我們要get table的Dom結構如下:
<body> .... <table> <tr> <td>A</td> </tr> <tr> <td> <table> <tr> <td>1</td> </tr> <tr> <td>2</td> </tr> </table> </td> </tr> </table> .... </body>
如果table有設id值的話,您就可以透過HtmlTable tableobj = page.getHtmlElementById("table1");
來得到table object,即可以利用HtmlTable定義的method,如官方說明文件提供的範例,如下
for (final HtmlTableRow row : tableobj.getRows()) {
System.out.println("Found row");
for (final HtmlTableCell cell : row.getCells()) {
System.out.println(" Found cell: " + cell.asText());
}
}
但我們要存取的table既沒有設定id,且我們要針對的為巢狀table下的第二個table資料,
回歸一個page能夠透過getElementByid(HtmlPage class定義的method)取得element's object,
當然也可以利用getElementsByTagName針對特定tag,但比較不方便的是沒有table專用的
getRows(), getCells()來用了,但也還好,利用下面的幾行code我們也可以得到。
DomNodeList<DomElement> tablelist = page.getElementsByTagName("table");
DomElement tabledom = tablelist.get(1);
Iterator<DomNode> domiter = tabledom.getChildren().iterator();
tablelist為一集合List,假設這個頁面只有兩個<table>tag,那麼我們可以想像內層的table即為
第二個index,即1,因此我們表示tablelist.get(1)為第二個table,再來就是直覺的利用
getChildren(),來走訪當下element (table)的children elements,至於怎麼走訪,相信常用HashMap
的人應該蠻熟練的!在此就不多加撰述!
留言
張貼留言