htmlutil

  HtmlUnit是Java一个开发工具包,利用它写的Java代码可以模仿人点击link,提交表单的功能.主要是用来测试.
    可以到这里http://htmlunit.sourceforge.net/了解详细信息.
    模仿一个特定的浏览器

    通常您会希望将模拟特定浏览器.这样做是通过传递  com.gargoylesoftware.htmlunit.BrowserVersion到的WebClient构造。常数提供了一些常见的浏览器,但您可以创建自己的特定版本的执行一个BrowserVersion 。
  
Java代码  收藏代码

   1. public void homePage_Firefox() throws Exception { 
   2.     final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_2); 
   3.     final HtmlPage page = webClient.getPage("http://htmlunit.sourceforge.net"); 
   4.     assertEquals("HtmlUnit - Welcome to HtmlUnit", page.getTitleText()); 
   5. } 

public void homePage_Firefox() throws Exception {
    final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_2);
    final HtmlPage page = webClient.getPage("http://htmlunit.sourceforge.net");
    assertEquals("HtmlUnit - Welcome to HtmlUnit", page.getTitleText());
}


找到特定元素
    一旦你得到了一个参考的HtmlPage ,您可以搜索特定HtmlElement之一的'get'方法,或使用的XPath 。下面是一个例子,找到一个'线'的ID ,搜到了锚的名字:
get 方法
 
Java代码  收藏代码

   1. public void getElements() throws Exception { 
   2. final WebClient webClient = new WebClient(); 
   3. final HtmlPage page = webClient.getPage("http://htmlunit.sourceforge.net"); 
   4. final HtmlDivision div = page.getHtmlElementById("some_div_id"); 
   5. final HtmlAnchor anchor = page.getAnchorByName("anchor_name"); 

    public void getElements() throws Exception {
    final WebClient webClient = new WebClient();
    final HtmlPage page = webClient.getPage("http://htmlunit.sourceforge.net");
    final HtmlDivision div = page.getHtmlElementById("some_div_id");
    final HtmlAnchor anchor = page.getAnchorByName("anchor_name");
}


Xpath
Java代码  收藏代码

   1. public void xpath() throws Exception { 
   2.     final WebClient webClient = new WebClient(); 
   3.     final HtmlPage page = webClient.getPage("http://htmlunit.sourceforge.net"); 
   4.  
   5.     //get list of all divs 
   6.     final List<?> divs = page.getByXPath("//div"); 
   7.  
   8.     //get div which has a 'name' attribute of 'John' 
   9.     final HtmlDivision div = (HtmlDivision) page.getByXPath("//div[@name='John']").get(0); 
  10. } 

public void xpath() throws Exception {
    final WebClient webClient = new WebClient();
    final HtmlPage page = webClient.getPage("http://htmlunit.sourceforge.net");

    //get list of all divs
    final List<?> divs = page.getByXPath("//div");

    //get div which has a 'name' attribute of 'John'
    final HtmlDivision div = (HtmlDivision) page.getByXPath("//div[@name='John']").get(0);
}


使用代理服务器
最后WebClient构造让您可以指定代理服务器信息,在这些情况下,你需要通过一个连接。
Java代码  收藏代码

   1. public void homePage_proxy() throws Exception { 
   2.     final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_2, "http://myproxyserver", myProxyPort); 
   3.  
   4.     //set proxy username and password  
   5.     final DefaultCredentialsProvider credentialsProvider = (DefaultCredentialsProvider) webClient.getCredentialsProvider(); 
   6.     credentialsProvider.addProxyCredentials("username", "password"); 
   7.  
   8.     final HtmlPage page = webClient.getPage("http://htmlunit.sourceforge.net"); 
   9.     assertEquals("HtmlUnit - Welcome to HtmlUnit", page.getTitleText()); 
  10. } 

public void homePage_proxy() throws Exception {
    final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_2, "http://myproxyserver", myProxyPort);

    //set proxy username and password
    final DefaultCredentialsProvider credentialsProvider = (DefaultCredentialsProvider) webClient.getCredentialsProvider();
    credentialsProvider.addProxyCredentials("username", "password");

    final HtmlPage page = webClient.getPage("http://htmlunit.sourceforge.net");
    assertEquals("HtmlUnit - Welcome to HtmlUnit", page.getTitleText());
}


指定此BrowserVersion将改变发送到服务器的用户代理header,这行影响一Javascript的一些行为 。
提交表单
我们经常需要改变表单元素的值,并且提交到服务器:
Java代码  收藏代码

   1. public void submittingForm() throws Exception { 
   2.     final WebClient webClient = new WebClient(); 
   3.  
   4.     // Get the first page 
   5.     final HtmlPage page1 = webClient.getPage("http://some_url"); 
   6.  
   7.     // Get the form that we are dealing with and within that form,  
   8.     // find the submit button and the field that we want to change. 
   9.     final HtmlForm form = page1.getFormByName("myform"); 
  10.  
  11.     final HtmlSubmitInput button = form.getInputByName("submitbutton"); 
  12.     final HtmlTextInput textField = form.getInputByName("userid"); 
  13.  
  14.     // Change the value of the text field 
  15.     textField.setValueAttribute("root"); 
  16.  
  17.     // Now submit the form by clicking the button and get back the second page. 
  18.     final HtmlPage page2 = button.click(); 
  19. } 

你可能感兴趣的:(JavaScript,.net,浏览器,firefox)