final
WebClient webClient=
new
WebClient();
webClient.getOptions().setCssEnabled(
false
);
webClient.getOptions().setJavaScriptEnabled(
false
);
final
HtmlPage page=webClient.getPage(
"http://www.yanyulin.info"
);
System.out.println(page.asText());
webClient.closeAllWindows();
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
HtmlUnit
的使用: 簡介:HtmlUnit
說白了就是一個瀏覽器,這個瀏覽器是用Java寫的無界面的瀏覽器,正因為其沒有界面,因此執行的速度還是可以滴,HtmlUnit
提供了一系列的API,這些API可以干的功能比較多,如表單的填充,表單的提交,模仿點擊鏈接,由于內置了Rhinojs
引擎,因此可以執行Javascript
作用:web的自動化測試(最初的目的),瀏覽器,網絡爬蟲
重要API的使用 在介紹API的使用之前要先明白的一個問題是,WebClient,WebWindow,Page三者之間的關系,所有的頁面最終都是在一個 WebWindow對象里面,WebClient在創建時會自動的創建一個WebWindow對象,當調用getPage時會將新頁面加載到 WebWindow里,你可以理解成WebClient就是IE內核,WebWindow就是呈現頁面的瀏覽器窗口,三者之間的關系圖如下圖所示:
1、模擬特定瀏覽器,也可以指定瀏覽器的相應版本(HtmlUnit最新版2.13現在可以模擬的瀏覽器有Chrome
/FireFox
/IE
)
1
2
</td>
|
WebClient webClient= new WebClient(BrowserVersion.CHROME);
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
2、查找特定元素,通過get或者XPath可以從HtmlPage中獲得特定的Html元素,如下例子
方法一,通過get方法獲取
1
2
3
</td>
|
HtmlPage page=webClient.getPage( "http://www.yanyulin.info" );
HtmlDivision div=(HtmlDivision)page.getElementById( "hed" );
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
方法二,通過XPath獲取,XPath通常用于無法通過Id搜索,或者需要更為復雜的搜索時,XPath的相關教程
XPath相關教程請查看我的個人博客
1
2
3
4
</td>
|
final HtmlDivision div = (HtmlDivision) page.getByXPath( "http://div" ).get( 0 );
System.out.println(div.asXml());
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
3、代理服務器的配置,代理的配置很簡單,只需要配置好地址,端口,用戶名與密碼即可
1
2
3
</td>
|
final WebClient webClient = new WebClient(BrowserVersion.CHROME, "http://127.0.0.1" , 8087 );
final DefaultCredentialsProvider credentialsProvider = (DefaultCredentialsProvider) webClient.getCredentialsProvider();
credentialsProvider.addCredentials( "username" , "password" );
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
4、模擬表單的提交
1
2
3
4
5
6
7
8
9
</td>
|
final HtmlForm form = page.getFormByName( "form" );
final HtmlSubmitInput button = form.getInputByName( "submit" );
final HtmlTextInput textField = form.getInputByName( "userid" );
textField.setValueAttribute( "test" );
final HtmlPage page = button.click();
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
API的使用就介紹到這,網絡爬蟲中主要目的就是獲取頁中所有的鏈接,代碼如下:
| | | | |