Используйте HtmlUnit для поиска в Google

#htmlunit

#htmlunit

Вопрос:

Следующий код представляет собой попытку выполнить поиск в 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();
      }
    } 
  

Комментарии:

1. Возможно, вы могли бы рассказать нам, что делает программа. Мы знаем, что он должен делать, но не знаем, что он делает. Есть исключения? трассировка стека?

2. он работает, работает нормально, без исключений, но не выводит xml / html. btnG работает, и не уверен, почему firefox видит btnK там, где должен быть btnG. это также может быть prb с синтаксическим анализатором.

Ответ №1:

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

Комментарии:

1. Первое, что я делаю всякий раз, когда получаю странный результат, — это вывод page1.asXml() на консоль… неизменно HTML не СОВСЕМ то, что я думаю…

2. да, это было обнаружение браузера, btnK — это не имя, которое Google использует для своей кнопки отправки, но оно есть в исходном коде html с использованием firefox. Спасибо

Ответ №2:

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

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