例如,1。在google上,怎样通过编程填好搜索栏的内容,然后点击search,得到google搜
索的结果。2。一些填表的网页,通过程序将表格的每一项都填好,然后点击submit,将结果交
上。3。或者hotmail自动登陆,等等感觉这几种都差不多,网上查了一整天,基本上都说用webclient 里面的uploadValues
,更新网页的name-value pair, 但是我试了不行,不知道点击 button的那个action
没做呢?应该怎么做呢?

解决方案 »

  1.   

    用几个FOREACH就可以实现批量修改控件的值
    http://badnewfish.spaces.msn.com/上面有参照哦!
      

  2.   

    我们都是分析网页或应用程序发送给服务器的信息。
    比如,第一个问题可以直接发送对应的URL请求就可以了。
    e.g 对于查询google,可以发送"http://www.google.com/search?hl=zh-CN&q=google&lr="
    后面两个也是类似的。
    关注有没有可以实现模拟点击某个按钮的方法
      

  3.   

    其实我也考虑过发送对应的URL请求,但是这个方法好像并不是十分通用
    因为有些参数,例如密码,就不能这么传的
      

  4.   

    badnewfish你说的是哪一篇文章亚?能不能贴上来看看?多谢
      

  5.   

    你可以用google公開的WebService服務
      

  6.   

    但是,google只是我举的一个例子,别的网站就不能用这样的方法了亚有没有用webclient 或者c#本身的class 就能解决的?多谢
      

  7.   

    webclient恐怕不太好,用HttpWebRequest和HttpWebResponse来实现吧,
    很简单的,比如要POST数据:public static string PostData(string url,string indata,CookieContainer myCookieContainer)
    {Form1 xxx=new Form1();
    xxx.xs();
    string outdata=""; 
    HttpWebRequest myHttpWebRequest=(HttpWebRequest)WebRequest.Create(url); 
    myHttpWebRequest.ContentType="application/x-www-form-urlencoded"; 
    //string indata1=
    myHttpWebRequest.ContentLength=indata.Length; 
    myHttpWebRequest.Method="POST"; 
    myHttpWebRequest.CookieContainer=myCookieContainer; 
    Stream myRequestStream=myHttpWebRequest.GetRequestStream(); 
    StreamWriter myStreamWriter=new StreamWriter(myRequestStream,Encoding.GetEncoding("gb2312"));  
    myStreamWriter.Write(indata); 
    myStreamWriter.Close(); 
    myRequestStream.Close(); 
    //
    HttpWebResponse myHttpWebResponse=(HttpWebResponse)myHttpWebRequest.GetResponse(); 
    myHttpWebResponse.Cookies=myCookieContainer.GetCookies(myHttpWebRequest.RequestUri); 
    Stream myResponseStream=myHttpWebResponse.GetResponseStream(); 
    StreamReader myStreamReader=new StreamReader(myResponseStream,Encoding.GetEncoding("gb2312")); 
    outdata=myStreamReader.ReadToEnd(); 
    myStreamReader.Close(); 
    myResponseStream.Close();
    //outdata="ok";
    return outdata;
    }
      

  8.   

    amnoh:这个只是用来post data的?click button该怎么办?还有,myCookieContainer是怎么用的?多谢了
      

  9.   

    click button该怎么办?
    ====================
    晕啊....我建议你先看看有关HTTP协议方面的东西,
    按下一个按钮后,向网站提交某些东西,它要么是GET请求,要么是POST式的,
    一般FORM都是用POST发向网站的,
    你只要看看HTML源代码,找到都POST了些什么数据就行,
    比如, 一个登录框, 有 一个文本框, 填用户名,叫 username, 一个密码框,叫password,一个提交按钮,
    那么按下提交后,将会把用户名和密码发到服务器中去,如何实现这个"按下"呢?
    很简单,你直接向那个FORM的action中指定的网页发送数据:username=zhangsan&password=123456就行,网站并不能分清楚接收到的数据是你点按钮发的,还是别的程序模拟的.到于那个CookieContainer,你可以看MSDN了解更详细的定义,这里不妨简单地记住,它用来保存网站发来的cookies,这样,你登录后,再请求其它页的数据时,把HttpWebRequest的CookieContainer设为这个cookieContainer,就能保证在网站上是一个Session,如果一些资源是必须登录后才能访问的,那这一点就很重要了.至于更高级的模拟,那么可以详细设定请求的Headers,比如,网站如果通过UrlReferrer来判定是否是盗链的话,你不妨这样设:
    myHttpWebResponse.Referer="该网站的某页地址";
    有的网站可能会通过检测浏览器类别来防止BOT程序访问,那么,通过设置UserAgent就可以伪装:
    myHttpWebResponse.UserAgent="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)";  //这个模拟的是IE6.0至于Get请求的,比Post的更简单,它少了一个再发送数据的步骤,要包含的数据都放在Url中了建议楼主花一两小时,看看相关资料,这个东西不难实现.
      

  10.   

    amnoh : 多谢多谢,我会按照你说的方向再看看,还是我水平不够呀^_^