[英]How to manipulate Javascript websites in Perl
我被要求自動登錄到一個 webapp(我假設是一個,它運行很多 .aspx 和 .js 腳本),目前只能在 IE 中運行。 現在我在 Perl 編程並嘗試使用 Win32::IE::Mechanize 運行 IE 瀏覽器並登錄。我所做的是嘗試從 webapp 中提取所有 forms,並給出用戶信息,填寫需要forms,但這是問題出現的地方,當我嘗試運行子程序時沒有出現forms......
於是我過渡到 WWW::Mechanize 並使用了 post 子程序(來自 LWP::UserAgent),它在很大程度上解決了這個問題。 現在我在響應中遇到了問題,從服務器,我得到這個腳本作為響應的內容,我不知道該怎么處理它。
所以我的問題是:使用 Perl 我如何在 go 中操縱 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;
還有這個帶有src的框架標題:
FRAME TITLE="Service Desk Express Navigator" SRC="options_nailogo.aspx" MARGINWIDTH=0 MARGINHEIGHT=0 NORESIZE scrolling=no
嘗試使用功能齊全的 JS 引擎來模擬瀏覽器將是一項艱巨的任務。 相反,我建議您只嘗試模擬與 web 站點的實際交互,而不關心實際發回的 HTML/JS 是什么。 您的服務器端代碼不關心 HTTP 提交是如何發生的,只關心它們是如何發生的。 誠然,如果 forms 發生很大變化,這會更加脆弱,但至少您並沒有嘗試實現完整的瀏覽器。
因此,請查看LWP::UserAgen t、 HTTP::Request和HTTP::Response等模塊。
我在這里復制並粘貼我對您的另一個重復問題的回答(您應該考慮刪除其中一個?)
該內容是網站來源:)
WWW::Mechanize 如何將 FRAME SRC 作為鏈接處理:
請注意,<FRAME SRC="..."> 標記從 HTML 中解析出來並被視為鏈接,因此此方法適用於它們。
您需要在該鏈接上使用follow_link
。
As far as dealing with Javascript, there is support for a Firefox Add-on called MozRepl that you can use in conjunction with WWW::Mechanize::Firefox that I have used in the past to call Javascript code while crawling a page.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.