首页新闻找找看学习计划

关于C# winform的文本框的值如何传到网站需要输入的文本框里面去

0
悬赏园豆:100 [已解决问题] 解决于 2013-06-05 15:27

我想自己做一个违章查询的C# winform软件。。。因为没有数据库。而且对方没有web服务的。我的想法就是把自己在文本框里面输入的值传到指定网站的文本框控件里面去。就不知道如何传过去。就是相当于我做一个违章查询的客户端。一般是在网页上输入一些基本信息就能查询了。我做的客户端是输入一些基本信息代替我在网页上输入。之后把结果返回给自己。

高卿的主页 高卿 | 初学一级 | 园豆:8
提问于:2013-04-16 21:41
< >
分享
最佳答案
0

两种方法:

1.HttpWebRequest 直接发送 请求,并获得响应数据!(这个本人时间比较少,请百度)

2.WebBrowser 相当于一个浏览器,然后登陆到网站(Navigate),获取控件,填入值,点击按钮,在DocumentCompleted方法里获得响应后的网页数据。然后分析,得到结果!

ps:有不懂得地方问我,免费解答!

收获园豆:10
SeeMore | 菜鸟二级 |园豆:313 | 2013-04-16 22:42

第二种方法有点不懂。能上个例子么

高卿 | 园豆:8 (初学一级) | 2013-04-16 22:44

@清月生: 是一个控件,百度吧亲,这个不能上传文件啊

SeeMore | 园豆:313 (菜鸟二级) | 2013-04-16 22:50

我要熄灯了。。。汗啊!!

SeeMore | 园豆:313 (菜鸟二级) | 2013-04-16 22:51

@殷龙: 我知道是空间啊。我说有么有相似的分析网页数据的例子。。

高卿 | 园豆:8 (初学一级) | 2013-04-16 22:51

@清月生: 有个重点!!轮循那里!。。可以获取控件神器

代码:

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();
}
}
}

SeeMore | 园豆:313 (菜鸟二级) | 2013-04-16 22:53

@殷龙: 写在documentcompleted里面

SeeMore | 园豆:313 (菜鸟二级) | 2013-04-16 22:54
其他回答(4)
0

我的方法与@殷龙 的方法不同

 通过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对象就可以。原理就是这样。

收获园豆:20
朝曦 | 园豆:1073 (小虾三级) | 2013-04-17 08:26

有点不太懂啊。。。新手求解释啊。viewState不是用来存储状态的吗。

支持(0) 反对(0) 高卿 | 园豆:8 (初学一级) | 2013-04-17 11:47

而且我用的是winform啊。能使用aspx页面么????

支持(0) 反对(0) 高卿 | 园豆:8 (初学一级) | 2013-04-17 11:49
0

上面2种方法有些复杂。

建议使用WebBrowser控件,当该控件打开指定网页的时候,是可以自动向一打开的网页上赋值,然后代码控制点击按钮等,基本上就是可以操作界面上的所有元素以及部分事件。

收获园豆:10
冲动 | 园豆:394 (菜鸟二级) | 2013-04-17 11:42
0

建议使用WebBrowser控件 。 

收获园豆:10
胖子哥哥 | 园豆:341 (菜鸟二级) | 2013-04-18 09:22

那就没有意味了。。

支持(0) 反对(0) 高卿 | 园豆:8 (初学一级) | 2013-04-18 10:52
0

这么简单的问题。请参照我的博文:http://www.cnblogs.com/axing/archive/2012/10/29/stephen_kang_WinForm.html

直接给网页上的文本框赋值。

收获园豆:50
何以解忧唯有撸码 | 园豆:368 (菜鸟二级) | 2013-06-04 15:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册