Как искать на YouTube с помощью HtmlUnit - PullRequest
2 голосов
/ 21 июля 2011

Интересно, можно ли искать YouTube с помощью HtmlUnit . Я начал писать код, вот он:

import java.io.IOException;
import java.net.MalformedURLException;
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlForm;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;

public class HtmlUnitExampleTestBase {
    private static final String YOUTUBE = "http://www.youtube.com";
    public static void main(String[] args) throws FailingHttpStatusCodeException, MalformedURLException, IOException {
        WebClient webClient = new WebClient();
        webClient.setThrowExceptionOnScriptError(false);

        //This is equivalent to typing youtube.com to the adress bar of browser
        HtmlPage currentPage = webClient.getPage("http://www.youtube.com");

        //Get form where submit button is located
        HtmlForm searchForm = (HtmlForm) currentPage.getElementById("masthead-search");
        //Printing result form
        System.out.println(searchForm.asText());
        final List<HtmlAnchor> listLinks = (List<HtmlAnchor>) newPage.getByXPath("//a[@class='ux-thumb-wrap result-item-thumb']");
        for (int i=0; i<listLinks.size(); i++){
            System.out.println(YOUTUBE + listLinks.get(i).getAttribute("href"));
        }
    }   
}

Теперь я не знаю, как ввести текст в поле поиска и нажать кнопку поиска.

Я видел учебники по HtmlUnit, но у меня возникла проблема, потому что они используют метод с именем: getElementByName, но кнопка поиска на YouTube не имеет имени, только идентификатор. Может ли кто-нибудь помочь мне?

РЕДАКТИРОВАТЬ: я отредактировал код выше кода, и теперь я получаю ссылки на YouTube с первой страницы. Но перед этим мне нужно отсортировать по дате загрузки, а затем получить ссылки. Может ли кто-нибудь помочь мне сделать сортировку?

Ответы [ 2 ]

3 голосов
/ 21 июля 2011

Я не HtmlUnit эксперт, но есть обходной путь. Вы можете добавить свою собственную кнопку в форму и использовать ее для отправки формы.

Вот пример кода с комментариями:

import java.io.IOException;
import java.net.MalformedURLException;

import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlButton;
import com.gargoylesoftware.htmlunit.html.HtmlForm;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlTextInput;

public class HtmlUnitExampleTestBase {
   public static void main(String[] args) throws FailingHttpStatusCodeException, MalformedURLException, IOException {
      WebClient webClient = new WebClient();
      webClient.setThrowExceptionOnScriptError(false);

      // This is equivalent to typing youtube.com to the adress bar of browser
      HtmlPage currentPage = webClient.getPage("http://www.youtube.com");

      // Get form where submit button is located
      HtmlForm searchForm = (HtmlForm) currentPage.getElementById("masthead-search");

      // Get the input field.
      HtmlTextInput searchInput = (HtmlTextInput) currentPage.getElementById("masthead-search-term");
      // Insert the search term.
      searchInput.setText("Nyan Cat");

      // Workaround: create a 'fake' button and add it to the form.
      HtmlButton submitButton = (HtmlButton) currentPage.createElement("button");
      submitButton.setAttribute("type", "submit");
      searchForm.appendChild(submitButton);

      // Workaround: use the reference to the button to submit the form. 
      HtmlPage newPage = submitButton.click();

      System.out.println(newPage.asText());
   }
}
1 голос
/ 21 июля 2011

HtmlUnit в порядке, но я очень предпочитаю Watir или Selenium для веб-автоматизации.

Одним из недостатков HtmlUnit является отсутствие методов селектора для получения элементов DOM способом, подобным jQuery. Проверьте проект css-selector, который добавит HtmlUnit, чтобы помочь вам сделать то, что вам нужно, очень легко. Вступление на Код Гудера .

Как только вы это заработаете, селектором формы поиска YouTube будет «.search-term», а селектором кнопки отправки будет «.search-button»

...