如何操纵Perl中的Javascript网站

时间:2011-07-12 16:09:39

标签: javascript perl dynamic-websites

我被要求自动登录到一个webapp(我假设是一个,运行很多.aspx和.js脚本),目前只能在IE中运行。现在我在Perl编程,并尝试使用Win32 :: IE :: Mechanize运行IE浏览器并登录。我所做的是尝试从webapp中提取所有表单,并给出用户信息,填写需要的形式,但这是问题出现的地方,当我尝试运行子程序时,没有任何形式出现......

然后我转换到WWW :: Mechanize并使用post子程序(来自LWP :: UserAgent),它解决了大部分问题。现在我在响应中遇到了问题,从服务器,我得到这个脚本作为响应的内容,我不知道如何处理它。

所以我的问题是:使用Perl如何在网站中操作Javascript函数?这甚至是解决问题的有效方法吗?

我也愿意用其他编程语言编写它。在此先感谢您的帮助! (这样我就可以完全登录到webapp)

更新:所述响应的内容:

 var msgTimerID;

 var strForceLogOff = "false";

 function WindowOnLoad(){

    if ("false" == "true" && "false" == "false") 
        MerlinSystemMsg("",64);

    if ("false"=="true") 
        msgTimerID = window.setInterval("MerlinSystemMsg(10095,64)", 300000,'javascript');

 }

 function MyShowModal(){

     showModalDialog("", window, strFeatures);}

 function clearMsgInterval(){

    window.clearInterval(msgTimerID);

 }

 function WindowOnUnLoad(){

     if(top.frames(0).document.getElementById("OPMODE").value =="LOGOFF"){

         strFeatures = "width=1,height=1,left=1000,top=1000,toolbar=no,scrollbars=no,menubar=no,location=no,directories=no,status=yes,resizable=1";

         window.open("ForceLogOff.aspx","forcelogout",strFeatures);

     }

 }

 window.onbeforeunload = WindowOnUnLoad;

 window.onload = WindowOnLoad;

还有这个Frame Title有src:

  

框TITLE = “服务台快速导航” SRC = “options_nailogo.aspx” MARGINWIDTH = 0 MARGINHEIGHT = 0 NORESIZE滚动=无

2 个答案:

答案 0 :(得分:2)

尝试使用功能齐全的JS引擎模拟浏览器将是一项艰巨的任务。相反,我建议您只是尝试模拟与网站的实际交互,而不关心HTML / JS实际发回的内容。您的服务器端代码并​​不关心HTTP提交的方式,只关注它们是如何进行的。不可否认,如果表单发生了很大的变化,这会更加脆弱,但至少你并没有尝试实现完整的浏览器。

请查看LWP::UserAgen t,HTTP::RequestHTTP::Response等模块。

答案 1 :(得分:0)

我正在复制并将我的答案粘贴到您的其他duplicate question (您应该考虑删除其中一个吗?)

该内容是网站的来源:)

How WWW::Mechanize deals with FRAME SRC作为链接:

  

请注意< FRAME SRC =“...”>标签是从HTML和。解析出来的   作为链接处理,所以这个方法适用于它们。

您需要在该链接上使用follow_link

就处理Javascript而言,支持名为MozRepl的Firefox加载项,您可以将其与我过去用过的WWW::Mechanize::Firefox一起用来在抓取时调用Javascript代码一页。