我正在尝试使用httpWebRequest来获得一个完整的网页,但我得到的响应并不是一个完整的网页,因为网页的一部分是由AJAX加载的,这部分需要一段时间(通常为10 - 30秒)载入)。有没有办法在检索网页内容之前设置/强制httpWebRequest等待几秒钟?
非常感谢任何帮助!
由于
答案 0 :(得分:1)
如果网站使用AJAX加载数据,那么使用HttpWebRequest可能无法正常工作。原因是该站点可能正在使用document.onLoad()或page.onLoad()方法向远程站点发出GET请求。这发生在浏览器中的javascript执行中。
如果你想让它发挥作用,你有两个选择。
1)发出对容器页面(您访问的主页面)的请求,以及对使用AJAX由容器页面加载的包含页面的第二个请求。为了找到包含的页面,你必须使用带有firebug插件的Firefox来找出内页的URL。
2)使用一些支持Javascript和HTML / DOM的更高级别的框架。例如,您可以尝试使用.NET中托管的microsoft的WebBrowser控件。或者您可以使用其他框架,前提是框架支持javascript并理解HTML。
答案 1 :(得分:0)
以下是我的代码
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;
答案 2 :(得分:-1)
为什么不跟这样简单的东西一起去:
WebClient w = new WebClient();
string pageSource = w.DownloadString(URL);
尝试此操作,如果有效,则将所有其余属性添加到WebClient对象