【问题标题】:C# - Webbrowser and JScriptC# - 网络浏览器和 JScript
【发布时间】:2014-07-02 03:34:43
【问题描述】:

我想在我的 C# 程序中从 streamcloud 中提取下载 url。 因此,我必须等待 10 秒钟,单击一个按钮,然后单击播放器。 然后我可以从 page-source 中提取下载 url。

我的问题:

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

  1. 自动:我必须在 10 秒后模拟单击按钮。但我的 HtmlElement 始终为空。

  2. 手动:我创建了一个带有 WebBrowser 控件的表单。但是这个控件没有显示例如按钮。我认为 WebBrowser 控件正在阻止所有 jscript 内容。有没有办法让 WebBrowser 显示所有内容?

或者还有其他方法可以获取下载地址吗?

【问题讨论】:

  • 什么是 StreamCloud?刚用谷歌搜索,不清​​楚您使用的是哪种服务。
  • 您是否尝试过使用 Fiddler 捕获单击按钮时发生的 http 流量?你也许可以复制它。
  • 1. Streamcloud 是视频 2 的虚拟主机。不,我没有尝试过。当我有时间时,我会这样做。
  • 啊.. 是的,这没有帮助。有网站吗?我们正在寻找 API。

标签: c# download webbrowser-control


【解决方案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;
}

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-30
      • 1970-01-01
      • 1970-01-01
      • 2012-05-14
      • 2013-03-19
      • 1970-01-01
      • 2012-03-26
      相关资源
      最近更新 更多