请教各位高手:我现在要做的工作是解析一个网页中由执行JavaScript脚本而动态生成的url,请问怎么解析得到?各位有谁熟悉rhino吗?在线等

解决方案 »

  1.   

    import javax.script.ScriptContext;
    import javax.script.ScriptEngine;
    import javax.script.ScriptEngineManager;
    import javax.script.SimpleScriptContext;public class Test {  public static void main(String[] args) throws Exception {
        ScriptEngineManager mgr = new ScriptEngineManager();
        ScriptEngine engine = mgr.getEngineByName("JavaScript");
        ScriptContext ctx = new SimpleScriptContext();
        engine.eval("/*代码片段1*/var x = 100;", ctx);
        engine.eval("function test(param) {return param * param;}", ctx);
        engine.eval("y=test(x);", ctx);
        System.out.println(ctx.getAttribute("y"));
      }
    }
      

  2.   

    我明白您的意思,您做的操作时求的x*x的值,那我想解析url,应该怎么做?
      

  3.   

    你是不是想说,怎么由java程序获得触发的js代码所生成的超链接.?
    如果是的话,ScriptEngineManager调用js代码,获取返回值不就好了吗.?
      

  4.   

    我是想做这样的事情,举个例子说明:
    我打开sina的首页,查看源文件,里边有静态的url,还有一些js脚本,想要得到由计算这些js脚本生成的url。在网上看到需要使用js脚本解析引擎模拟浏览器的功能执行这些js脚本,比如使用rhino脚本解析引擎,但是具体不知道怎么实现,请高手指教
      

  5.   

    你把相关代码通过程序下载下来,eval啊。你的主题是“关于js脚本解析引擎的问题”,所以,我没回答如何下载脚本内容的问题。
      

  6.   

    我现在假定脚本内容已经有了,只是不知道该如何解析这个js脚本,怎么eval?您能说具体点吗?假如要模拟引擎执行下面的脚本,这个脚本是从sina的主页上down下来的/* location ads begin */
    /* 2010-04-01 16:48:50 */// libweb_getCookie
    eval(function(p,a,c,k,e,r){e=function(c){return c.toString(a)};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('8 9(a){2 b=3.4.e(";",a);5(b==-1){b=3.4.6}7 g(3.4.f(a,b))}8 h(a){2 b=a+"=";2 c=b.6;2 d=3.4.6;2 i=0;k(i<d){2 j=i+c;5(3.4.f(i,j)==b){7 9(j)}i=3.4.e(" ",i)+1;5(i==0)l}7\'\'}',22,22,'||var|document|cookie|if|length|return|function|libweb_getCookieVal|||||indexOf|substring|unescape|libweb_getCookie|||while|break'.split('|'),0,{}));var local_index = unescape(libweb_getCookie('dummy_ip_local_index'));
    var location1 = unescape(libweb_getCookie('dummy_ip_location1'));
    var location2 = unescape(libweb_getCookie('dummy_ip_location2'));if (local_index == '') {
        // location info
        var dictLoc = {"安徽":0,"北京":1,"重庆":2,"福建":3,"甘肃":4,"广东":5,"广西":6,"贵州" :7,"海南":8,"河北":9,"黑龙江":10,"河南":11,"湖北":12,"湖南":13,"内蒙古":14,"江苏":15,"江西":16,"吉林":17,"辽宁":18,"宁夏":19,"青海":20,"山西":21,"陕西":22,"山东":23,"上海":24,"四川":25,"天津":26,"西藏":27,"新疆":28,"云南":29,"浙江":30,"香港":31,"澳门":32,"台湾":33};
        if(typeof remote_ip_info == "object" && remote_ip_info.ret == 1) {
         local_index = dictLoc[remote_ip_info.province]; if(typeof local_index == "undefined") {
    local_index = 1;
    location1 = "其它";
    location2 = "其它";
         }else if(remote_ip_info.province == "北京" || remote_ip_info.province == "天津" || remote_ip_info.province == "上海" || remote_ip_info.province == "重庆") {
         location1 = remote_ip_info.province + '市';
         location2 = remote_ip_info.province;
         }else if(remote_ip_info.province != "香港" && remote_ip_info.province != "澳门" && remote_ip_info.province != "广西" && remote_ip_info.province != "宁夏" && remote_ip_info.province != "内蒙古" && remote_ip_info.province != "西藏" && remote_ip_info.province != "新疆" && remote_ip_info.province != ""){
         location1 = remote_ip_info.province + '省';
         location2 = remote_ip_info.city;
         }else{
         location1 = remote_ip_info.province;
         location2 = remote_ip_info.city;
         } // 临时
    /*if(remote_ip_info.start == "180.95.128.0" || remote_ip_info.start == "180.95.224.0") {
    local_index = 4;
    location1 = "甘肃省";
    location2 = "兰州";
    }*/    }else{
    // no result
         local_index = 1;
    try{
    var ip = remote_ip_info.ip.split(".");
    }catch(e){ } if(typeof ip != "undefined" && (ip[0] == "10" || (ip[0] == "172" && parseInt(ip[1]) >= 16 && parseInt(ip[1]) <= 31) || (ip[0] == "192" && ip[1] == "168"))) {
         location1 = "北京市";
    location2 = "北京";
    }else{
    location1 = "其它";
         location2 = "其它";
    }
        }
    }// webShow 1.2.6 for zhitou and pinpai, WSCSubstr 1.0.0
    eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('1i 1x(){P.1j="1.2.6";P.X=1i(a,b,c){P.1j="1.0.0";4 d=(1k[3]==Q?Q:11);5(R a=="Y"||a=="")12 11;4 e=a.1y(\'\');4 f=0;4 g=e.7;9(4 i=0;i<g;i++){5(f>=c){1z}5(e[i].1A(0)<=1B){f++}M{f+=2}}5(f>c&&d!=Q){i--}12 a.1l(b,i)};4 h=S U();4 l=S U();4 m=S U();4 n=S U();4 o={\'O\':\'我也要在这里发布\',\'13\':\'1m://1C.15.1n.1o\',\'N\':\'1m://1D.15.1n.1o/1E/15/1F.1G\'};4 p=1k[0];5(R p=="16"){17{4 q=p.1H;4 r=p.1I;4 s=p.1p;4 t=p.1J;4 u=p.Z;4 v=p.1K;4 w=p.1L;4 x=p.1M;4 y=p.18;4 z=p.19}1a(e){12 11}}4 A=(p.1q==V?Q:p.1q);4 B=(p.1r==V?"1s":p.1r);4 C=(p.W==V?"1t":p.W);4 D=(p.1u==V?11:p.1u);4 E=v*w;5(R r=="16"){9(4 i 1N r){4 F=11;5(r[i].Z==V||r[i].Z==""){5(r[i].1p.1l(s,1)!=\'1\'){F=Q}}M{r[i].Z=","+r[i].Z+",";5(r[i].Z.1O(","+u+",")==-1){F=Q}}5((r[i].O==""&&C=="1t")||(r[i].N==""&&C=="N")||F==Q){5(A==Q)1P;M r[i]=o}5(R r[i].8!="Y"&&r[i].8!="")h[r[i].8]=r[i];M l[l.7]=r[i]}9(i=l.7;i<E;i++){l[l.7]=o}}5(B=="1s"||B=="1v"){4 G=1Q.1R("1S"+q);5(G.7>0){9(4 i=0;i<G.7;i++){5(G[i].1b("8")!=V&&G[i].1b("8")!="")m[G[i].1b("8")]=G[i];M n[n.7]=G[i]}}5(D==Q){5(h.7>0){9(4 i=0;i<h.7;i++){5(h[i]!=V){4 H=h[i];5(H.O!=""){5(C=="N"){m[H.8].10[0].T=\'<1c 1d="\'+H.N+\'" 1e="0" />\';m[H.8].10[1].T=P.X(H.O,0,x)}M{m[H.8].T=P.X(H.O,0,x)}m[H.8].1f=H.13;5(R H.W!="Y")m[H.8].1g("1h",H.W)}}}}}M{5(m.7>0){9(4 i=0;i<m.7;i++){5(m[i]!=V){5(R h[i]=="16"){H=h[i]}M{H=o}5(C=="N"){4 I=\'<1c 1d="\'+H.N+\'" 1w="\';5(y!="")I+=\'18:\'+y+\'14;\';5(z!="")I+=\'19:\'+z+\'14;\';I+=\'" 1e="0" />\';m[i].10[0].T=I;m[i].10[1].T=P.X(H.O,0,x)}M{m[i].T=P.X(H.O,0,x)}m[i].1f=H.13;5(R H.W!="Y")m[H.8].1g("1h",H.W)}}}}5(l.7>0){4 J=S U();4 K=S U();9(4 i=0,j=0;i<E;i++,j++){17{5(l[j].O==""){1T S 1U();}M{J[i]=l[j]}}1a(e){J[i]=o}}4 k=0;9(i=0;i<w;i++){K[i]=S U();9(4 j=0;j<v;j++){K[i][j]=J[k];k++}}k=0;9(i=0;i<v;i++){9(4 j=0;j<w;j++,k++){17{5(C=="N"){5(R K[j][i].N=="Y")K[j][i].N=K[j][i].1V;4 I=\'<1c 1d="\'+K[j][i].N+\'" 1w="\';5(y!="")I+=\'18:\'+y+\'14;\';5(z!="")I+=\'19:\'+z+\'14;\';I+=\'" 1e="0" />\';n[k].10[0].T=I;n[k].10[1].T=P.X(K[j][i].O,0,x)}M{n[k].T=P.X(K[j][i].O,0,x)}n[k].1f=K[j][i].13;5(R K[j][i].W!="Y")n[k].1g("1h",K[j][i].W)}1a(e){1W(e.1X)}}}}}5(B=="1Y"||B=="1v"){4 L=S U();L[\'1Z\']=h;L[\'20\']=l;12 L}}',62,125,'||||var|if||length|pos|for|||||||||||||||||||||||||||||||||||||||else|pic|title|this|true|typeof|new|innerHTML|Array|null|type|csubstr|undefined|city|childNodes|false|return|url|px|sina|object|try|width|height|catch|getAttribute|img|src|border|href|setAttribute|webtype|function|version|arguments|substr|http|com|cn|area|rearrange|action|padding|text|fixedinc|both|style|webShow|split|break|charCodeAt|255|p4p|d1|pfpghc|1217235599_75506058_zhitou|jpg|resid|webs|province|cols|rows|titlelen|in|indexOf|continue|document|getElementsByName|res|throw|Error|picpath|alert|message|data|fixed|grid'.split('|'),0,{}));eval(function(p,a,c,k,e,r){e=function(c){return c.toString(a)};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('8 9(a,b,c){1 d=(h[3]==5?5:6);4(j a=="k"||a=="")7 6;1 e=a.l(\'\');1 f=0;1 g=e.m;n(1 i=0;i<g;i++){4(f>=c){o}4(e[i].p(0)<=q){f++}r{f+=2}}4(f>c&&d!=5){i--}7 a.s(b,i)}',29,29,'|var|||if|true|false|return|function|WSCSubstr||||||||arguments||typeof|undefined|split|length|for|break|charCodeAt|255|else|substr'.split('|'),0,{}));
    /* location ads end */
      

  7.   

    这个没法弄。它涉及到浏览器对象了(比如我看到的cookie)
      

  8.   

    对,是涉及到浏览器对象了但是我从网上看到说只需要关心window和document就可以了
      

  9.   

    我看到的论文里说的是只有两类浏览器对象可能包含url,一类以window.open成员函数为代表的,另一类以document.write函数为代表的