WallAll程序在解析某些网页的时候,无法得到某些字段的真实值。比如:http://www.tudou.com/programs/view/UE1Fqhl_6_w/ 中,含有“该视频被播放:”的播放次数,我用WallAll程序得到的结果都是“0”,而页面真实显示的结果是“1959”;就此我跟踪了网页的源代码:
<li>
    该视频被播放:<b class="playNum">0</b> &nbsp;
    评论:<b class="commentNum">0</b>
</li>而在“program_play_44.js”文件中,有JavaScript代码将显示值修改了:if(o.playNum >= 2000) 
   $('.playNum').html(o.playNum).css('color','#f60');
else
   $('.playNum').html(o.playNum);
在调用这段代码之前,网页发送了如下的HTML请求:
http://www.tudou.com/programs/view_ajax.php?itemID=23109414&uid=0&rnd=0.843696178549679我目前分析之所以WallAll程序没有改变显示值,其主要原因是在程序还没有发送上面消息的时候就发送Event了,请问高手,我要接收什么类型的消息才能够将上面的HTML请求结果接收到啊?

解决方案 »

  1.   

    js代码总要在某个事件中得到的,你也设置这个事件回调来截获调用,大致原理如下:
    var old_onload = window.onload;
    window.onload = function (){
      old_onload();
      // 现在去取值
    }但有个问题就是,如果原来的脚本使用了AJAX异步请求,这样拦截的可能还是0,因为结果还没有返回,这个时候需要设置自己的AJAX状态回调。仔细分析一下它的请求代码,总是可以实现的,实在不行还可以使用定时器,等待一段时间再取。
      

  2.   


    我看了一下代码,那个函数好像并没有什么地方调用的,反正就执行了。我也在walkall程序里面加入了一些定时操作,Sleep(10000),其结果也是一样,发现其结果没有任何变化。
      

  3.   

    在COM程序中不能使用Sleep调用,但能使用定时器
      

  4.   

    试下设置连接点(为IHTMLDocument2*)
    连接点的Sink类重载IPropertyNotifySink, IOleClientSite, IDispatch
    IPropertyNotifySink::OnChanged(DISPID id)
    判断id == DISPID_READYSTATE
    不确信可能得到AJAX请求...
      

  5.   

    谢谢,这种方法也不大行,现在找到其他方法了,我就不用MSHTML的方法做这件事情了。不过谢谢两位,我结贴了!