簡體   English   中英

C#-Webbrowser和JScript

[英]C# - Webbrowser and JScript

我想從C#程序中的streamcloud中提取下載URL。 因此,我必須等待10秒鍾,單擊一個按鈕,然后單擊播放器。 然后,我可以從頁面源中提取下載URL。

我的問題:

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

  1. 自動:我必須模擬10秒鍾后點擊按鈕。 但是我的HtmlElement始終為null。

  2. 手動:我使用WebBrowser控件創建了一個表單。 但是此控件未顯示例如按鈕。 我認為WebBrowser控件阻止了所有jscript內容。 有沒有辦法讓WebBrowser顯示所有內容?

還是有其他獲取下載網址的方法?

如果要在安裝了瀏覽器(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;
}

只需使用httpwebrequest或webclient:

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!");
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM