两种方法:
1.HttpWebRequest 直接发送 请求,并获得响应数据!(这个本人时间比较少,请百度)
2.WebBrowser 相当于一个浏览器,然后登陆到网站(Navigate),获取控件,填入值,点击按钮,在DocumentCompleted方法里获得响应后的网页数据。然后分析,得到结果!
ps:有不懂得地方问我,免费解答!
第二种方法有点不懂。能上个例子么
@清月生: 是一个控件,百度吧亲,这个不能上传文件啊
我要熄灯了。。。汗啊!!
@殷龙: 我知道是空间啊。我说有么有相似的分析网页数据的例子。。
@清月生: 有个重点!!轮循那里!。。可以获取控件神器
代码:
if (e.Url.ToString().Contains("http://my.58.com/infoall/"))
{
HtmlDocument page_modify = webBrowser1.Document;
foreach (HtmlElement em in page_modify.All) //轮循
{
if (em.GetAttribute("id").Contains("update") && em.GetAttribute("tongji").Contains("list_opt_update"))
{
hi[houseCount] = new HouseInfo("", em.GetAttribute("href"));
houseCount++;
}
if (em.GetAttribute("className") == "t" && em.GetAttribute("target") == "_blank")
{
hi[houseCount - 1].Name = em.InnerText;
RtbAppend(DateTime.Now.ToString("T") + " 扫描到房源【" + houseCount + "】: " + em.InnerText + "\r\n", Color.Blue);
}
}
int nowPage = int.Parse(e.Url.ToString().Split('/')[4]);
if (nowPage < lastPageNum)
{
webBrowser1.Navigate("http://my.58.com/infoall/" + (nowPage + 1) + "/");
}
else
{
button3.Enabled = true;
button3.Text = "刷新";
if (button3.Enabled && checkBox3.Checked)
{
btn3_Click();
}
}
}
@殷龙: 写在documentcompleted里面
我的方法与@殷龙 的方法不同
通过fiddler工具可以知道,浏览器的每次请求都是HTTP报文也可以说是文本。
比如页面上有两个服务器控件一个TEXTBOX一个BUTTON 每次点击button都会发送post请求。操作步骤如下
1、请求http://localhost:17170/WebForm1.aspx(发送的是请求报文1)
2、服务器返回HTTP报文1(即你在页面上看见的)
2、在textbox中输入123
3、点击button(发送的是求情报文2)
4、服务器返回HTTP报文2
限于篇幅问题,我这里只贴出请求报文2的内容
POST http://localhost:17170/WebForm1.aspx HTTP/1.1 Host: localhost:17170 Connection: keep-alive Content-Length: 213 Cache-Control: max-age=0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Origin: http://localhost:17170 User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31 Content-Type: application/x-www-form-urlencoded Referer: http://localhost:17170/WebForm1.aspx Accept-Encoding: gzip,deflate,sdch Accept-Language: zh-CN,zh;q=0.8 Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3 Cookie: language=zh-CN; ASP.NET_SessionId=dyqiz3awzuqyceemsz1scffp __VIEWSTATE=%2FwEPDwULLTE0MDM4MzYxMjNkZIEut3WFn%2BRfbKUm1Knfl7CPkgZviLGZ2D0QaH7Ewhus&__EVENTVALIDATION=%2FwEWAwLI2NS8DgLs0bLrBgKM54rGBtvia6mngYhoXK9a1S%2BWkOr%2FZKeC6HNiS%2BO9%2F8ntCqH8&TextBox1=123&Button1=Button
你会发现文本框的内容在最后一行,你只要替代最后一行的123就可以了。
至于返回来的http报文怎么解析,你先自己尝试一下。
发送请求的时候使用基于TCP的socket对象就可以。原理就是这样。
有点不太懂啊。。。新手求解释啊。viewState不是用来存储状态的吗。
而且我用的是winform啊。能使用aspx页面么????
上面2种方法有些复杂。
建议使用WebBrowser控件,当该控件打开指定网页的时候,是可以自动向一打开的网页上赋值,然后代码控制点击按钮等,基本上就是可以操作界面上的所有元素以及部分事件。
建议使用WebBrowser控件 。
那就没有意味了。。
这么简单的问题。请参照我的博文:http://www.cnblogs.com/axing/archive/2012/10/29/stephen_kang_WinForm.html
直接给网页上的文本框赋值。