2012-12-10 17 views
1

我想從我的C#程序中的streamcloud中提取下載url。 因此我必須等待10秒,點擊一個按鈕並點擊播放器。 然後我可以從頁面源中提取下載url。C# - Webbrowser和JScript

我的問題:

我有2種方法可以做到這一點:

  1. 自動:我有10秒後,以模擬按鈕點擊。但是我的HtmlElement始終爲空。

  2. 手動:我創建了一個WebBrowser控件的窗體。但是這個控件沒有顯示例如按鈕。我認爲WebBrowser控件會阻止所有jscript內容。有沒有辦法,WebBrowser顯示所有內容?

或者是否有其他方式獲得下載url?

+0

什麼是StreamCloud?只是搜索了一下,並不清楚你使用的是哪種服務。 –

+0

您是否嘗試過使用Fiddler捕獲點擊該按鈕時發生的http流量?你可能只能複製它。 –

+0

1. Streamcloud是一個視頻webhoster 2.不,我沒有試過這個。當我有時間時,我會這樣做。 – Link

回答

1

如果您想在安裝了瀏覽器(IE或Firefox)的計算機上執行此操作,則可以使用任何框架進行自動測試。 WatiN是一個不錯的選擇。

事情是這樣的:

using (var browser = new IE("http://www.streamcloud.com/YOUR_VIDEO_URL")) 
{ 
    browser.Button(Find.ByName("Play")).Click(); 
    // wait for 10 seconds, or better use some WatiN functionality like WaitUntilExists 
    System.Threading.Thread.Sleep(10000); 
    // extract URL 
    var element = browser.Element(Find.ById("URL_CONTAINER_ID")); 
    string videoUrl = element.Text; 
} 
+0

我會試試看 – Link

0

只需使用的HttpWebRequest或Web客戶端:

public string ResolveStreamcloud(string url) 
{ 
    var client = new WebClient(); 
    var reqParams = new NameValueCollection(); 

    var response = client.DownloadString(url); 

    var regexObj = new Regex("<input.*?name=\"(.*?)\".*?value=\"(.*?)\">", RegexOptions.Singleline); 
    var matchResults = regexObj.Match(response); 
    while (matchResults.Success) 
    { 
     reqParams.Add(matchResults.Groups[1].Value, matchResults.Groups[2].Value); 
     matchResults = matchResults.NextMatch(); 
    } 

    Thread.Sleep(10500); 

    byte[] responsebytes = client.UploadValues(url, "POST", reqParams); 
    string responsebody = Encoding.UTF8.GetString(responsebytes); 

    string resolved = Regex.Match(responsebody, "file: \"(.+?)\",", RegexOptions.Singleline).Groups[1].Value; 

    if (!String.IsNullOrEmpty(resolved)) 
    { 
     return resolved; 
    } 
    else 
    { 
     throw new Exception("File not found!"); 
    } 

}