我想使用httpWebRequest來獲得一個完整的網頁,但我得到的響應不是一個完整的網頁,因爲部分網頁由AJAX加載,這部分需要一會兒(通常加載10-30秒)。有沒有一種方法可以設置/強制httpWebRequest在檢索網頁內容之前等待幾秒鐘?HTTPWebRequest等待內容加載通過Ajax
任何幫助將不勝感激!
感謝
我想使用httpWebRequest來獲得一個完整的網頁,但我得到的響應不是一個完整的網頁,因爲部分網頁由AJAX加載,這部分需要一會兒(通常加載10-30秒)。有沒有一種方法可以設置/強制httpWebRequest在檢索網頁內容之前等待幾秒鐘?HTTPWebRequest等待內容加載通過Ajax
任何幫助將不勝感激!
感謝
下面是我的代碼
HttpWebRequest httpWebRequest = null;
HttpWebResponse httpWebResponse = null;
Stream webResponseStream;
StreamReader streamReader;
string html = "";
try
{
UTF8Encoding encoding = new UTF8Encoding();
byte[] data = encoding.GetBytes(postData);
httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 (.NET CLR 3.5.30729)";
httpWebRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
httpWebRequest.ContentType = "application/x-www-form-urlencoded";
httpWebRequest.KeepAlive = false;
httpWebRequest.Method = WebRequestMethods.Http.Post;
httpWebRequest.AllowAutoRedirect = true;
httpWebRequest.Headers.Add("Accept-Language", "en-us");
httpWebRequest.ContentLength = data.Length;
Stream dataStream = httpWebRequest.GetRequestStream();
dataStream.Write(data, 0, data.Length);
dataStream.Close();
httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
webResponseStream = httpWebResponse.GetResponseStream();
// Reading the webResponseStream with streamReader object and assigning into one string
streamReader = new StreamReader(webResponseStream);
html = streamReader.ReadToEnd();
}
catch{
}
return html;
爲什麼不能與某些thign簡單這樣去:
WebClient w = new WebClient();
string pageSource = w.DownloadString(URL);
試試這個,如果它工作再加入所有其餘的你屬性到WebClient對象
感謝您的快速響應。 WebClient的工作方式與HttpRequest相同。我仍然無法獲得完整的網頁。有沒有辦法讓Web Client等待從遠程網站下載數據20秒之前等待? – 2010-11-16 22:53:32
如果網站使用AJAX加載數據,則使用HttpW ebRequest可能無法正常工作。原因是該網站可能使用document.onLoad()或page.onLoad()方法向遠程站點發出GET請求。這發生在瀏覽器的JavaScript執行內部。
如果你想讓這個工作,你有兩個選擇。
1)發出對容器頁面(您訪問的主頁面)的請求,並對容器頁面使用AJAX加載的包含頁面發出第二個請求。爲了找到包含的頁面,您必須使用Firefox和Firebug插件來找出內部頁面的URL。
2)使用一些支持Javascript和HTML/DOM的高級框架。例如,您可以嘗試使用.NET中託管的Microsoft WebBrowser控件。或者您可以使用其他框架,只要框架支持JavaScript並理解HTML。
你將不得不爲此使用WebBrowser控件。沒有我知道的類對Javascript有任何支持。 – leppie 2010-12-06 11:37:24