2011-10-24 4 views
0

次のコードは、Googleを検索し、その結果をテキストまたはHTML形式で返します。 コードはほぼ完全にコードスニペットのオンラインから直接コピーされていましたが、検索結果を返さない理由はありません。どのようにhtmlunitを使用して、ブラウザを使わずに検索クエリを提出すると、Googleの検索結果を返すのですか?HtmlUnitを使用してGoogleを検索する

 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がbtnGが必要なbtnKが見えるのかわかりません。それはまた、パーサーとの間でもよい。 –

答えて

3

page1.getWebResponse().getContentAsString()でHTMLを検査する際に、送信ボタンが(私はFirefoxで観察するものではないです)btnGないbtnKという名前が付けられているため、生成されたHTMLを変更するいくつかのブラウザ検出がなければなりませんこれを変更すると、結果が期待どおりになります。

+0

私が奇妙な結果を得たときに最初に行うことは、コンソールに 'page1.asXml()'をプリントすることです...いつもHTMLは私がそれと思うQUITEではありません... –

+0

はいブラウザの検出でした、btnK Googleがその送信ボタンに使う名前ではありませんが、Firefoxのソースを使用しています。ありがとう –

1

私はこれをチェックしました。実際には、2つのGoogleページの2つのID:

  • btnK:画面の中央に1つの長いテキストボックスがあります。今回は、ボタンのid = 'gbqfa'
  • btnG:Googleの検索結果ページ(メインテキストボックスが画面上部にあります)に表示されます。今回はボタンのid = 'gbqfb'
関連する問題