大家好:
    请教一下,idhttp控件,怎样取到网页js动态生成的内容,直接Get一个地址,取里的内容里,没有js生成的值

解决方案 »

  1.   

    用模拟提交,直接get得不到,idhttp的post,先用网页提交,用wpe抓包看看提交信息,对照着写idhttp的post信息
      

  2.   

    截包里可以看到值,但不可能每次都去截包,是想做一个自动post的程序
      

  3.   

    如果js比较复杂的话,这种情况还是用webbrowser来处理比较好
    用户webbrowser来获取页面内容并处理。
      

  4.   

    截包人工可以分析出来,问题是idhttp怎样取到,不能用webbrowser控件
      

  5.   

    js在浏览器里运行生成的内容,截包人工可以分析出来?
    截包只能得到js的代码和调用的代码吧,它们运行的结果,应该无法截取到的
      

  6.   

    我是截取post包里,包体的内容里包含,目前直接截取是取不到,现在想idhttp这控件能不能取到,怎样取
      

  7.   

    哦,它的js是外部的文件?
    可以另外再取一次,但是,执行还是需要ie或者支持js的解释器才行,另外再取一次取得的也只是它的js源代码,没有它执行后的结果的
      

  8.   


    办法就是使用ie去执行js,再取它的结果
    或自己利用一个js的解释器来执行,只怕了解起来更费劲。ie毕竟还是有很多接口、文档的
      

  9.   

    那idhttp控件可以取得,不用webbrowser控件
      

  10.   

    反正你的程序要能让js执行,才能得到结果
    要么使用ie(即Twebbrowser),要么自己找一个js的解释执行模块
      

  11.   

    结局的方法有两种:
    1.简单的JS代码,可以用DELPHI重写,然后取HTTP返回的相应值自行计算。
    2.复杂的JS代码,无法重写,或者重写很辛苦的,可以用TScriptControl(WINDOWS自带)组件解析JS代码之后再获取相应的值。
    例如: 
    (JS代码)JsCode:='function BaseNumRefEncode(str, fileSize ) {
            var value = String(str);
            var result = "";
            for (var i = 0; i < value.length; i++) {
                if (i > 0) { result += ","; }
                var code = value.charCodeAt(i);
                if ( code > 127 ){
                    return   "_MMM_CCC_" + str ;
                }
               result +=  (parseInt( code )  + fileSize);
            }
            return result;
     }';(DELPHI调用)  function  BaseNumRefEncode(mystr:string;FileSize:Integer):string;
      var
      obj:TScriptControl;
      s,f:OleVariant;
      Parameters:PSafeArray;
      Bound:TSafeArrayBound;
      Index:Integer;
      begin
      result:='';
      obj:=TScriptControl.Create(nil);
      try
        obj.Language:='JavaScript';
        obj.AddCode(JsCode);
        s:=mystr;
        f:=FileSize;
        Bound.cElements:=2;   //2个参数
        Bound.lLbound:=0;     //1维
        try      Parameters:=SafeArrayCreate(VT_Variant,1,Bound);      Index:=0;
          SafeArrayPutElement(Parameters,Index,s);      Index:=1;
          SafeArrayPutElement(Parameters,Index,f);      result:=obj.Run('BaseNumRefEncode',Parameters);
        finally
          SafeArrayDestroy(Parameters);
        end;
      finally
        Obj.Free;
      end;
      end;
      

  12.   

    不能用webbrowser控件 是原因是什么呢?
      

  13.   

    做的是一个网络收发包的软件,用webbrowser控件没idhttp控件好用,且用webbrowser经常会卡死
      

  14.   

    能用idhttp当然比webbrowser要可控,ie太庞杂
    但是,涉及js解释器,就只能 要么自己找解释器,要么借助于浏览器
      

  15.   

    js解释器?有这样的东西?好的,我找一下,TKS!!
      

  16.   

    用google的jsv8编译成dll让delphi调用
      

  17.   

    jsv8?没听说过,我搜一下,TKS!!
      

  18.   

    JS太多相当于开发一个浏览器的解析组件、、、不是那么简单、、不过如果只针对一个网站,,还是可以慢慢分析JS去写的。