[英]C# - Webbrowser and JScript
我想從C#程序中的streamcloud中提取下載URL。 因此,我必須等待10秒鍾,單擊一個按鈕,然后單擊播放器。 然后,我可以從頁面源中提取下載URL。
我的問題:
我有2種方法可以做到這一點:
自動:我必須模擬10秒鍾后點擊按鈕。 但是我的HtmlElement始終為null。
手動:我使用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.