CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

500分求解超难问题,能成功外理的再开4个贴给分

楼主wxq4100798(aa)2005-09-06 10:13:02 在 .NET技术 / ASP.NET 提问

现有一.net做的网站,它是用__doPostBack做分页的,我通过一个程序,能访到到它的第一个页面如  
  http://www.fotocasa.es/busq/resultados.aspx?idTipoInmueble=2&idTipoOferta=2&idProvincia=27&idZona1=0&idZona2=0&idBarrio=0&idOtrasZonas=0&IdPoblacion=0&idDistrito=-2&Precio=0&Superficie=0&nHabitaciones=0&idTipoVivienda=0&x=50&y=9  
   
  我现在要访问他的第二个页面(远程程序访问,一般网站都有一个page参数如page=2)因为其分页是用__dopostback做的,url参数完全一样,我怎么样才能访问到他的第二页(程序自动访问,不是手动翻页,因为要从该网站获取数据是通过URL进行的,该地址第一页/第二页/__等等URL地址完全一样,故程序没法执行)?高手指点一下  
  问题点数:100、回复次数:34Top

1 楼lovelxj(伊斯人,吾谁与归)回复于 2005-09-06 10:37:48 得分 0

哈哈       看起来复杂   ,  
  难道要模拟点击么?  
  帮UPTop

2 楼iloveyour(爱老虎油)回复于 2005-09-06 10:43:58 得分 0

.net里面__dopostback的参数是存在一个名叫__VIEWSTATE的隐藏文本框中,如果不嫌麻烦可以用BASE64解码得到里面的内容,并不是如你上面所说的以URL参数来传递Top

3 楼brando_beat(Eの懒龙)回复于 2005-09-06 12:24:31 得分 0

不可以用模拟点击、会被当成病毒的、哈哈。  
  但是问题还没有看懂。Top

4 楼cuike519(I will be back!)回复于 2005-09-06 13:17:11 得分 0

你可以使用HttpSniffer这样的软件查看一下每次请求时的内容,这样你便可以模拟出来发送同样的请求到服务器上。Top

5 楼ccwq(Wind Love Rove Forever)回复于 2005-09-06 13:21:34 得分 0

呵呵,有意思,留个手印!!Top

6 楼xiaojiao52()回复于 2005-09-06 13:34:17 得分 0

楼主说的问题让人看不太懂Top

7 楼eyych(2006)回复于 2005-09-06 13:41:51 得分 0

upTop

8 楼sfwxw0456(全职杀手)回复于 2005-09-06 13:51:15 得分 0

帮顶!Top

9 楼jinjazz(近身剪)回复于 2005-09-06 13:54:46 得分 0

没用过Top

10 楼jamex(1 + 1 = 爱)回复于 2005-09-06 13:59:20 得分 0

Option   Explicit  
  Dim   Doc   As   MSHTML.HTMLDocument  
  Dim   flag   As   Boolean  
   
   
  Private   Sub   Command1_Click()  
          flag   =   False  
          WebBrowser1.Navigate2   Text1.Text  
  End   Sub  
   
  Private   Sub   Command2_Click()  
          Dim   f     As   Object  
          Dim   i   As   Integer  
           
          For   i   =   1   To   3  
                  Set   Doc   =   WebBrowser1.document  
                  Set   f   =   Doc.All("Form1")  
       
                  flag   =   False  
                   
                  f.All("__EVENTTARGET").Value   =   "dgrdResultados1$_ctl54$_ctl"   +   CStr(i)  
                  f.All("__EVENTARGUMENT").Value   =   ""  
                   
                  Debug.Print   i  
                  Debug.Print   f.All("__EVENTTARGET").Value  
                  Debug.Print   f.All("__EVENTARGUMENT").Value  
                   
                  Call   f.submit  
                   
                  While   flag   =   False  
                          DoEvents  
                  Wend  
                   
          Next  
           
           
           
  End   Sub  
   
  Private   Sub   Form_Load()  
          ctl   =   "dgrdResultados1$_ctl54$_ctl"  
  End   Sub  
   
  Private   Sub   WebBrowser1_DocumentComplete(ByVal   pDisp   As   Object,   URL   As   Variant)  
        flag   =   True  
        MsgBox   "ok"  
  End   Sub  
   
  Top

11 楼adandelion(水源是CSDN最黑的地方,但这个最黑是CSDN一手制造的!)回复于 2005-09-06 14:37:39 得分 0

UPTop

12 楼jamex(1 + 1 = 爱)回复于 2005-09-06 14:45:00 得分 0

我用vb6写的,花了我2个小时,这是修正版,你试试看,给我500分吧!呵呵  
   
  Option   Explicit  
  Dim   Doc   As   MSHTML.HTMLDocument  
  Dim   script   As   MSHTML.HTMLWindow2  
  Dim   ctl   As   String  
  Dim   flag   As   Boolean  
   
  Private   Sub   Command1_Click()  
          flag   =   False  
          WebBrowser1.Navigate2   "http://www.fotocasa.es/busq/resultados.aspx?idTipoInmueble=2&idTipoOferta=2&idProvincia=27&idZona1=0&idZona2=0&idBarrio=0&idOtrasZonas=0&IdPoblacion=0&idDistrito=-2&Precio=0&Superficie=0&nHabitaciones=0&idTipoVivienda=0&x=50&y=9  
  End   Sub"  
   
  Private   Sub   Command2_Click()  
          Dim   f     As   Object  
          Dim   i   As   Integer  
           
          For   i   =   1   To   4     '这里轮询4页,你可以修改它  
                  flag   =   False  
                  Call   WebBrowser1.document.parentWindow.execScript("__doPostBack('dgrdResultados1$_ctl54$_ctl"   &   CStr(i)   &   "',   '')",   "javascript")  
                   
                  Debug.Print   i  
                   
                  While   flag   =   False  
                          DoEvents  
                  Wend  
          Next  
  End   Sub  
   
  Private   Sub   WebBrowser1_DocumentComplete(ByVal   pDisp   As   Object,   URL   As   Variant)  
        flag   =   True  
        MsgBox   "ok"  
  End   SubTop

13 楼jamex(1 + 1 = 爱)回复于 2005-09-06 14:46:44 得分 0

Option   Explicit  
  Dim   Doc   As   MSHTML.HTMLDocument  
  Dim   script   As   MSHTML.HTMLWindow2  
  Dim   ctl   As   String  
  Dim   flag   As   Boolean  
   
  Private   Sub   Command1_Click()  
          flag   =   False  
          WebBrowser1.Navigate2   "http://www.fotocasa.es/busq/resultados.aspx?idTipoInmueble=2&idTipoOferta=2&idProvincia=27&idZona1=0&idZona2=0&idBarrio=0&idOtrasZonas=0&IdPoblacion=0&idDistrito=-2&Precio=0&Superficie=0&nHabitaciones=0&idTipoVivienda=0&x=50&y=9"  
  End   Sub  
   
  Private   Sub   Command2_Click()  
          Dim   f     As   Object  
          Dim   i   As   Integer  
           
          For   i   =   1   To   4     '这里轮询4页,你可以修改它  
                  flag   =   False  
                  Call   WebBrowser1.document.parentWindow.execScript("__doPostBack('dgrdResultados1$_ctl54$_ctl"   &   CStr(i)   &   "',   '')",   "javascript")  
                   
                  Debug.Print   i  
                   
                  While   flag   =   False  
                          DoEvents  
                  Wend  
          Next  
  End   Sub  
   
  Private   Sub   WebBrowser1_DocumentComplete(ByVal   pDisp   As   Object,   URL   As   Variant)  
        flag   =   True  
        MsgBox   "ok"  
  End   Sub  
  Top

14 楼flcandclf(怪手大分)回复于 2005-09-06 14:49:14 得分 0

看不懂Top

15 楼coldpanth(^War3^)回复于 2005-09-06 14:53:56 得分 0

Url不变,页码就应该是Post过去的.Top

16 楼jamex(1 + 1 = 爱)回复于 2005-09-06 15:01:03 得分 0

看不懂,试一下就知道了Top

17 楼wxq4100798(aa)回复于 2005-09-06 16:52:50 得分 0

to     jamex(1   +   1   =   爱)   你是用WebBrowser模拟的啊?我本身的意思是不用手功点击,程序运行完一页之后,自动跳转到下面一读取运行Top

18 楼leisang(仰望深邃的星空)回复于 2005-09-06 17:08:37 得分 0

楼主的问题本身就有问题,用postback写的根本不适合用url传送  
   
  用   jamex(1   +   1   =   爱)   的方法也可以Top

19 楼dbserver(寻找完美的自我)回复于 2005-09-06 17:29:51 得分 0

帮楼主顶!  
   
  ---------------  
  欢迊来到麦高网-私活兼职首选平台   www.mgao.netTop

20 楼tmfc()回复于 2005-09-06 17:51:24 得分 0

不模拟postback看来是不行了,手动改viewstate似乎是行不通的,那个结构还是比较复杂的,而且有放篡改措施.Top

21 楼cat_hsfz(我的新Blog在http://cathsfz.cnblogs.com)回复于 2005-09-06 18:31:38 得分 0

你就模拟_doPostBack进行HTTP   Post咯,需要Post的数据其实比复杂的Form直接Submit还要简单呢,你把__VIEWSTATE等3个hidden的input模拟上对应的内容就可以了。Top

22 楼wxq4100798(aa)回复于 2005-09-06 20:19:50 得分 0

cat_hsfz   ,兄弟能告诉我怎么模拟吗?偶不会搞啊,如果不在.net环境下,如asp下面,可以模拟吗?Top

23 楼jamex(1 + 1 = 爱)回复于 2005-09-06 21:11:47 得分 0

to   wxq4100798(aa)   :  
   
  这程序是自动执行的,程序运行完一页之后,它会自动跳转到下面一读取运行  
   
  一般的话,做网站机器人程序,都着这么做的。  
   
  或者也可用Inet控件,原理是一样的Top

24 楼jamex(1 + 1 = 爱)回复于 2005-09-06 21:13:09 得分 0

对了,执行时,可以将   MsgBox   "ok"   这句话   去掉,我调试用的Top

25 楼cat_hsfz(我的新Blog在http://cathsfz.cnblogs.com)回复于 2005-09-06 23:36:29 得分 0

其实我不明白“我现在要访问他的第二个页面”是什么意思?你是用HttpWebRequest去抓取别人的网页,还是在你自己的网页上要进行某种操作?Top

26 楼rlqiang((不留)戒烟买房中。。。)回复于 2005-09-07 00:12:26 得分 0

我看明白了,不过不会。好问题,帮顶。Top

27 楼fletcher(fletcherx)回复于 2005-09-07 08:56:48 得分 0

upTop

28 楼wf5360308(冷月孤峰)回复于 2005-09-07 09:17:03 得分 0

帮顶一下,这个问题没有研究过。呵呵Top

29 楼lwx2523(林飞)回复于 2005-09-07 09:28:30 得分 0

UPTop

30 楼wxq4100798(aa)回复于 2005-09-07 13:02:15 得分 0

to     cat_hsfz()      
        我程序的本意思就是用HttpWebRequest去抓取他网站上我所需要的信息,我现在已经能成功地抓取到第一页我所需要的信息,现在我想抓取第二页(因为其网站的URL第一页和第二页一样,所以我没法抓到第二页)Top

31 楼pignut_wang(花生米)回复于 2005-09-07 13:23:36 得分 0

好问题,up一下  
  Top

32 楼cat_hsfz(我的新Blog在http://cathsfz.cnblogs.com)回复于 2005-09-08 13:37:41 得分 0

那你就把HttpWebRequest.Method改为POST,然后通过拼接字符串的形式把要提交的Form的数据(其实就是三个hidden,其他字段一律不管)组合起来,然后把该字符串encode到HttpWebRequest的Stream里面,大概思路就是这样。例子你可以看MSDN的:  
  ms-help://MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfsystemnethttpwebrequestclassgetrequeststreamtopic.htmTop

33 楼wxq4100798(aa)回复于 2005-09-08 16:06:41 得分 0

我自已写的php取数据方法,虽然页面是翻过去了,但是我程序本身取数据就根据url来的,有什么方法解闷吗  
  <?php  
  set_time_limit(0);  
  $url   =   "http://www.fotocasa.es/busq/resultados.aspx?idTipoInmueble=2&idTipoOferta=2&idProvincia=27&idZona1=0&idZona2=0&idBarrio=0&idOtrasZonas=0&IdPoblacion=0&idDistrito=-2&Precio=0&Superficie=0&nHabitaciones=0&idTipoVivienda=0&x=50&y=9";  
  $file   =   file_get_contents($url);  
   
  //取__VIEWSTATE  
  if(preg_match_all("|__VIEWSTATE\'?\"?\s+value\s*=\s*\"?\"(.+?)\"|is",$file,$viewStates))  
  {  
  $viewState   =   $viewStates[1][0];  
  }  
   
  //取得总页数  
  $page   =   1;  
  if(preg_match_all("|javascript:__doPostBack\(\'dgrdResultados1$_ctl54$_ctl(.+?)\',\'\'\)\"|is",$file,$pages))  
  {  
  echo   "go   2222       ";  
  print_r($pages[1]);  
  }  
   
   
  for($page=0;$page<7;$page++)  
  {  
                    if($page   !=   0)  
                    {  
   
                            $file   =   file_get_contents($url);//还是取得一样的结果啊  
                    }  
  if(preg_match_all("|<tr\s+onClick\s*=\s*\"?\'?\s*submitar\(\s*\'?([0-9]+)\'?\s*[^)]+\)[^>]+>(.*?)</tr>|is",$file,$matches))  
  {  
   
  for($i=0;$i<count($matches[2]);$i++)  
  {  
  //echo   $matches[2][$i];  
   
  if(preg_match_all("|<td\s+[^>]*>(.*?)</td><td\s+[^>]*>(.*?)</td><td\s+[^>]*>(.*?)</td><td\s+[^>]*>(.*?)</td><td\s+[^>]*>(.*?)</td><td\s+[^>]*>(.*?)</td><td\s+[^>]*>(.*?)</td><td\s+[^>]*>(.*?)</td>|is",$matches[2][$i],$match1))  
  {  
  for($j=0;$j<count($match1[1]);$j++)  
  {  
  $location   =   $match1[2][$j];  
  $type   =   $match1[3][$j];  
  $roomNum   =   $match1[4][$j];  
  $area   =   $match1[5][$j];  
  $plant   =   $match1[6][$j];  
  $price   =   $match1[7][$j];  
  $state   =   $match1[8][$j];  
  //写入数据库    
  echo   $location;  
  echo   "&nbsp;&nbsp;";  
  echo   $type;  
  echo   "&nbsp;&nbsp;";  
  echo   $roomNum;  
  echo   "&nbsp;&nbsp;";  
  echo   $area   ;  
  echo   "&nbsp;&nbsp;";  
  echo   $plant;  
  echo   "&nbsp;&nbsp;";  
  echo   $price;  
  echo   "&nbsp;&nbsp;";  
  echo   $state;  
  echo   "<br><br>";  
   
  }  
   
  }  
  }  
  }  
  //自动提交到下一个页面?   怎么样取下一页的数据呢?  
  ?>  
   
  <form   name="Form1"   action="<?=$url?>"   method="post">  
  <input   type="hidden"   name="__EVENTTARGET"   value=""   >  
  <input   type="hidden"   name="__EVENTARGUMENT"   value="">  
  <input   type="hidden"   name="__VIEWSTATE"   value="<?=$viewState?>">  
  </form>  
  <script   language="javascript"   type="text/javascript">  
  <!--  
   
  eventTarget   =   "dgrdResultados1$_ctl54$_ctl"+"<?=$page?>";  
  var   theform;  
  if   (window.navigator.appName.toLowerCase().indexOf("microsoft")   >   -1)   {  
  theform   =   document.Form1;  
  }  
  else   {  
  theform   =   document.forms["Form1"];  
  }  
   
  theform.__EVENTTARGET.value   =   eventTarget.split("$").join(":");  
  theform.__EVENTARGUMENT.value   =   eventArgument;  
  theform.submit();  
   
  //   -->  
  </script>  
  <?php  
  }  
  ?>Top

34 楼jamex(1 + 1 = 爱)回复于 2005-09-08 20:43:09 得分 0

搂主做这个程序的目的是自动获取别人网站上的信息,还是其他别的用途?  
  如果是自动获取别人网站上的信息,可以换一种思路Top

相关问题

  • 超难问题求解。
  • 求解dataadapter的update问题,为什么老不成功??
  • 高分求解图片处理问题!
  • 关于 rtsp 代理 (高分求解)
  • 项目管理高分求解!
  • 求解!给讲讲原理,谢谢谢!
  • 用户权限管理!重分求解
  • 高分,求解.http代理问题
  • 编译原理问题 (讨论求解)
  • ※■超级难的问题,300分求解■※

关键词

  • .net
  • 模拟
  • 页面
  • 数据
  • 网站
  • 执行
  • idzona
  • 程序
  • dgrdresultados
  • explicitdim

得分解答快速导航

  • 帖主:wxq4100798

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo