asp.net 采集 的页面有ajax异步调用的数据。通过
WebRequest request = WebRequest.Create(url); //请求url
WebResponse response = request.GetResponse(); //获取url数据
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8"));
string tempStr = reader.ReadToEnd();
tempStr 里没有异步调用过来的数据。
用
WebBrowser web = new WebBrowser();
HtmlDocument doc = web.Document; //抓取网页
HtmlElement hem = doc.GetElementById("list_uin");//这里就像js里面一样通过ID来查找对象
则可以捕获 ajax异步调用的数据。
但是webBrowser 在asp.net下运行报错。
WebRequest request = WebRequest.Create(url); //请求url
WebResponse response = request.GetResponse(); //获取url数据
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8"));
string tempStr = reader.ReadToEnd();
tempStr 里没有异步调用过来的数据。
用
WebBrowser web = new WebBrowser();
HtmlDocument doc = web.Document; //抓取网页
HtmlElement hem = doc.GetElementById("list_uin");//这里就像js里面一样通过ID来查找对象
则可以捕获 ajax异步调用的数据。
但是webBrowser 在asp.net下运行报错。
你说的 【 但是webBrowser 在asp.net下运行报错。】这肯定不是不能用的问题,而是你代码有问题, 你应该把错误和代码部分贴出来,初步猜测是你没有添加引用
webs = new WebBrowser();
webs.Navigate("http://xui.ptlogin2.qq.com/cgi-bin/qlogin");//让webbrowser加载这个地址,这是腾讯网自动登录,我们就是利用腾讯的自动检测来获取我们登录的QQ号
webs.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(WebCompleted);
void WebCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
//为了保险起见 我们在这再次判断是否加载完成
string bb = aa;
if (webs.ReadyState == WebBrowserReadyState.Complete && webs.IsBusy == false)
{
HtmlDocument doc = webs.Document; //抓取网页
HtmlElement hem = doc.GetElementById("list_uin");//这里就像js里面一样通过ID来查找对象
while (doc == null || hem == null) //网络操作总是伴随着一些不可预知的异常,所以在这以防万一对象为空,我们继续判断
{
}
for (int i = 0; i < hem.Children.Count; i++)
{
string innertext = hem.Children[i].InnerText.Trim(); //获取到昵称和QQ号,格式是这样的 昵称(qq号)
string[] temps = innertext.Split(' '); //我们把昵称和(qq号)分离
string name = temps[0]; //得到昵称
string num = temps[temps.Length - 1]; //得到QQ号
num = num.Replace("(", "").Replace(")", ""); //因为这里我们得到的QQ号还是(qq号)带有括号,所以需要去掉括号
// ListViewItem item = new ListViewItem(); //创建Listviewitem对象
// item.Text = name; //将昵称设置为文本
// item.SubItems.Add(num);//将QQ号添加进子项
//listView1.Items.Add(item);//最后将listviewitem对象添加进listview
}
}
else
{ }
}
进委托之后webs.ReadyState是null