Используйте HtmlUnit для поиска в Google - PullRequest
0 голосов
/ 25 октября 2011

Следующий код является попыткой поиска в Google и возврата результатов в виде текста или HTML.Код был почти полностью скопирован непосредственно из фрагментов кода в Интернете, и я не вижу причин, по которым он не возвращает результаты поиска.Как вы возвращаете результаты поиска Google, используя 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();
      }
    } 

Ответы [ 2 ]

3 голосов
/ 25 октября 2011

Должно быть какое-то обнаружение браузера, которое изменяет сгенерированный HTML, потому что при проверке HTML с помощью page1.getWebResponse().getContentAsString() кнопка отправки называется btnG, а не btnK (это не то, что я наблюдаю в Firefox).Внесите это изменение, и результат будет ожидаемым.

1 голос
/ 27 марта 2012

Я только что проверил это. На самом деле это 2 идентификатора для 2 страниц Google:

  • btnK: на главной странице Google (где в середине экрана находится 1 длинное текстовое поле). На этот раз идентификатор кнопки = 'gbqfa'
  • btnG: на странице результатов Google (где главное текстовое поле находится вверху экрана). На этот раз идентификатор кнопки = 'gbqfb'
...