2011-10-24 55 views
0

以下代碼嘗試搜索谷歌,並將結果作爲文本或HTML返回。 該代碼幾乎完全從在線代碼片段中直接複製,並且我沒有理由不返回搜索結果。如何在沒有瀏覽器的情況下使用htmlunit提交搜索查詢來返回谷歌搜索結果?使用HtmlUnit來搜索谷歌

 import com.gargoylesoftware.htmlunit.WebClient; 
     import java.io.*; 
     import com.gargoylesoftware.htmlunit.html.HtmlPage;  
     import com.gargoylesoftware.htmlunit.html.HtmlInput; 
     import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput; 


     import java.net.*; 

     public class GoogleSearch { 

     public static void main(String[] args)throws IOException, MalformedURLException 
     { 
     final WebClient webClient = new WebClient(); 

     HtmlPage page1 = webClient.getPage("http://www.google.com"); 
     HtmlInput input1 = page1.getElementByName("q"); 
     input1.setValueAttribute("yarn"); 

     HtmlSubmitInput submit1 = page1.getElementByName("btnK"); 

     page1=submit1.click(); 

     System.out.println(page1.asXml()); 

     webClient.closeAllWindows(); 
     } 
    } 
+0

你也許可以告訴我們程序的功能。我們知道它應該做什麼,但不知道它做了什麼。有什麼異常?堆棧跟蹤? –

+0

它運行,生成很好,沒有例外,但不打印出XML/HTML。 btnG工作,並不確定爲什麼firefox看到btnK應該有一個btnG。它也可能是解析器的主要部分。 –

回答

3

必須有一些檢測瀏覽器改變生成的HTML,因爲page1.getWebResponse().getContentAsString()檢查HTML時,提交按鈕被命名爲btnG而不是btnK(這是不是我在Firefox中看到)。做出這個改變,結果將是預期的結果。

+0

我隨時得到一個奇怪結果的第一件事就是打印'page1.asXml()'到控制檯...總是HTML不是我認爲的那麼... ... –

+0

是的,它是瀏覽器檢測,btnK是不是谷歌使用它的提交按鈕的名稱,但它是使用Firefox的HTML源代碼。謝謝 –

1

我剛剛檢查過這個。它實際上是2個谷歌頁面的ID:

  • btnK:在谷歌的主頁(其中有1個長文本框在屏幕中間)。這次按鈕的ID ='gbqfa'
  • btnG:在google結果頁面(主文本框位於屏幕頂部)。這次按鈕的ID ='gbqfb'