我被要求自动登录到一个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滚动=无
答案 0 :(得分:2)
尝试使用功能齐全的JS引擎模拟浏览器将是一项艰巨的任务。相反,我建议您只是尝试模拟与网站的实际交互,而不关心HTML / JS实际发回的内容。您的服务器端代码并不关心HTTP提交的方式,只关注它们是如何进行的。不可否认,如果表单发生了很大的变化,这会更加脆弱,但至少你并没有尝试实现完整的浏览器。
请查看LWP::UserAgen t,HTTP::Request和HTTP::Response等模块。
答案 1 :(得分:0)
我正在复制并将我的答案粘贴到您的其他duplicate question (您应该考虑删除其中一个吗?)
该内容是网站的来源:)
How WWW::Mechanize deals with FRAME SRC作为链接:
请注意< FRAME SRC =“...”>标签是从HTML和。解析出来的 作为链接处理,所以这个方法适用于它们。
您需要在该链接上使用follow_link
。
就处理Javascript而言,支持名为MozRepl的Firefox加载项,您可以将其与我过去用过的WWW::Mechanize::Firefox一起用来在抓取时调用Javascript代码一页。