java - 如何使用 HtmlUnit 搜索 YouTube

标签 java youtube htmlunit

我想知道是否可以使用 HtmlUnit 搜索 YouTube 。我开始写代码,这里是:

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 上的搜索按钮没有名称,只有 ID。有人可以帮助我吗?

编辑:我编辑了上面的代码,现在我从第一页获取 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.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());
   }
}

关于java - 如何使用 HtmlUnit 搜索 YouTube,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6770121/

相关文章:

java - Eclipse 4 RCP Part 类最佳实践

java - 范围报告框架 - 如何获取范围报告日志函数中存储的值

java - 如何动态创建类文件?

javascript - 检索特定的播放列表缩略图时,它没有获得视频的观看和描述

iphone - 为什么 Youtube 视频没有填满 UiWebView?

java - 无法实现 View OnClickListener 或 ToolTipView.OnToolTipViewClickedListener

android - 如何从一个 channel 中获得所有YouTube视频?

java - log4j冲突?

.net - HtmlUnit 不等待 AJAX 执行

java - htmlunit : checkbox not getting checked