我想在我的C#-Program中从streamcloud中提取下载URL。 因此,我必须等待10秒钟,单击按钮并单击播放器。 然后我可以从页面源中提取下载URL。
我的问题:
我有两种方法可以做到这一点:
自动:我必须在10秒后模拟按钮上的一次点击。但是我的HtmlElement总是为空。
手动:我使用WebBrowser控件创建了一个表单。但是这个控件没有显示例如按钮。我认为WebBrowser控件阻止了所有jscript-content。有没有办法,WebBrowser显示所有内容?
或者是否有其他方法可以获得download-url?
答案 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!");
}
}