C# - Webbrowser和JScript

时间:2012-12-10 18:45:00

标签: c# download webbrowser-control

我想在我的C#-Program中从streamcloud中提取下载URL。 因此,我必须等待10秒钟,单击按钮并单击播放器。 然后我可以从页面源中提取下载URL。

我的问题:

我有两种方法可以做到这一点:

  1. 自动:我必须在10秒后模拟按钮上的一次点击。但是我的HtmlElement总是为空。

  2. 手动:我使用WebBrowser控件创建了一个表单。但是这个控件没有显示例如按钮。我认为WebBrowser控件阻止了所有jscript-content。有没有办法,WebBrowser显示所有内容?

  3. 或者是否有其他方法可以获得download-url?

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

只需使用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!");
    }

}