2011-07-21 68 views
2

我想知道是否可以用HtmlUnit搜索YouTube。我開始寫代碼,那就是:如何使用HtmlUnit搜索YouTube

​​3210

現在我不知道如何鍵入一些文本搜索字段,然後按搜索按鈕。

我看到了有關教程的HtmlUnit,但因爲他們使用了一個名爲方法我有一個問題:getElementByName,但在YouTube上的搜索按鈕沒有名字,只是一個ID。有人能幫助我嗎?

編輯:我編輯了代碼上面的代碼,現在我從第一頁獲取youtube鏈接。但在此之前,我需要按上傳日期排序然後抓取鏈接。有人可以幫我做分類嗎?

回答

3

我不是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()); 
    } 
} 
+0

它的工作原理。現在我只想用除默認以外的其他標準對結果進行排序。默認是按相關性排序,如何更改以按上傳日期排序? –

+0

@ИванБишевац:也許最好是開一個新的問題? – Jasper

+0

好吧,我會那樣做的。 –

1

HtmlUnit是好的,但我非常喜歡WatirSelenium的網絡自動化。

HtmlUnit的缺點之一是缺乏以類似於jQuery的方式獲取DOM元素的選擇器方法。查看css-selector項目,該項目將添加到HtmlUnit中,以幫助您輕鬆完成所需的任務。有一個介紹Gooder Code

一旦你得到那個工作,對於YouTube的搜索表單選擇將是「.search-術語」和提交按鈕的選擇將是「.search按鈕」

+0

你建議我採取的Watir或Selemium?我在論壇上聽到很多人推薦Selenuim。 –

+0

@ИванБишевац:這是[Watir vs Selenium v​​s Sahi的比較](http://stackoverflow.com/questions/606550/watir-vs-selenium-vs-sahi/643124#643124)。 – Jasper

+0

@ИванБишевац:我喜歡他們倆。如果我想要真正快速簡便的錄製/回放和簡單的功能測試,我想使用Selenium;如果我想要更強大的控制結構,邏輯和/或自動化,我使用Watir。 – jkraybill