亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

用JavaScript獲取網(wǎng)頁中的js、css、Flash等文件

 更新時間:2006年12月20日 00:00:00   作者:  
作者:馬健
郵箱:stronghorse@tom.com
主頁:http://stronghorse.yeah.net
版本:1.01
初始發(fā)布日期:2005.08.29
最后更新日期:2005.09.28

目錄
一、前言
二、從E書或網(wǎng)頁中獲取文件的一般步驟
三、從E書或網(wǎng)頁中獲取鏈接進來的css文件
四、從E書或網(wǎng)頁中獲取鏈接進來的js文件
五、從E書或網(wǎng)頁中獲取Flash文件
六、從E書或網(wǎng)頁中獲取背景音樂文件
七、從E書中獲取圖像文件
八、進入frame頁面
九、其它問題

一、前言

最近我又聽到有人抱怨用miniKillEBook反編譯電子書,只能得到HTML網(wǎng)頁,得不到E書中的js、css、Flash、背景音樂等文件。其實只要各位對JavaScript代碼有所了解,就算只用已經(jīng)公開發(fā)布的CtrlN,要得到E書中的這些文件也不是很難。

事先聲明:
1、下面所有方法均基于JavaScript,因此可能會給人繞圈子的感覺,效果也無法與直接調(diào)用IE非公開接口的IECracker、KillEBook相比。不過這樣正好平衡:對于有意通過反編譯學習他人做書經(jīng)驗的好學者,用JavaScript本身就是一個練手的過程,而這種方法又很難用于批量反編譯,因此做書的人也不必產(chǎn)生過多的擔憂。殺雞取蛋的事俺是不做的,哈哈……
2、為了便于使用,下面給出的JavaScript寫得都很傻瓜,所有URL分析工作都交給代碼完成,各位只要會按Ctrl+C、Ctrl+V鍵就好。但是自動化操作畢竟有其極限,對于大多數(shù)網(wǎng)頁來說用這些代碼應(yīng)該可以搞定,但是如果碰到搞不定的網(wǎng)頁,還是要靠人工對HTML代碼進行分析。在分析時如果碰到加密網(wǎng)頁,可以用CtrlN的“HTML片段”功能,對加密HTML進行解碼。在源代碼中查找鏈接時,可以用搜索功能快速定位。
3、現(xiàn)在基于IE內(nèi)核的電子書基本上通過自定義協(xié)議插件實現(xiàn),對JavaScript協(xié)議插件的支持程度不一,因此如果代碼在某些電子書上出現(xiàn)錯誤,請不必奇怪。
4、除了用于反編譯E書,這些代碼在平時瀏覽正常網(wǎng)頁時也有用,如用來抓網(wǎng)頁中的Falsh文件。
5、所有代碼均在Windows XP SP2下測試通過,其它環(huán)境我沒試,不過估計IE版本不能低于6.0。
6、所有代碼均為我的原創(chuàng),個人可以免費使用,網(wǎng)站轉(zhuǎn)載、商業(yè)牟利請先獲得我的授權(quán)

二、從E書或網(wǎng)頁中獲取文件的一般步驟

從E書或普通網(wǎng)頁中獲取各種文件的步驟基本相同,只是需要輸入的JavaScript代碼不同:

  1. 啟動CtrlN。這是為了防止電子書或網(wǎng)頁禁用快捷鍵。如果你確認快捷鍵沒有被禁,可以省略這一步,在第3步直接按Ctrl+N鍵。
  2. 打開電子書或IE,進入引用了需要抓取的css、js、Flash等文件的頁面。注意這里必須是真正的頁面,不能是frame。后面會談到如何判斷frame及如何進入frame頁面。
  3. 將CtrlN的“快捷鍵行為”設(shè)置為“彈出新窗口”,然后用鼠標在欲抓取的網(wǎng)頁上點一下,再按下Ctrl+N鍵,彈出新的IE窗口,里面顯示的內(nèi)容與欲抓取的頁面內(nèi)容相同,地址欄上顯示有頁面的URL。
  4. 在彈出的IE窗口中,根據(jù)需要將對應(yīng)的JavaScript代碼(后面會給出)復制、粘貼到地址欄上,然后按回車鍵即可。

對于IE 6,第一次運行JavaScript代碼可能會在地址欄下彈出一個黃條,提示這段代碼被阻止運行,點一下黃條,選擇“允許阻止的內(nèi)容”,然后再重復步驟3、4,即可看到結(jié)果。

三、從E書或網(wǎng)頁中獲取鏈接進來的css文件

JavaScript本身提供了獲取外部css文件內(nèi)容的接口,因此在前述一般步驟的步驟4中,將下面內(nèi)容復制、粘貼到IE地址欄上,然后按回車鍵即可看到內(nèi)容:

javascript:str='';c=document.styleSheets;for(i=0;i<c.length;i++){o=c[i];if (o.href=='')continue;str+='========== ';str+=o.href;str+='<br><xmp>\n';str+=o.cssText;str+='</xmp><br><br>\n';};document.write(str);

如果當前HTML頁面沒有鏈接到外部css文件,則步驟4完成后無反應(yīng)或顯示一個空頁,這時可以檢查一下頁面的HTML源代碼進行確認。如果當前頁面鏈接了多個css文件,所有css文件內(nèi)容都會顯示出來,格式經(jīng)過IE排版后可能和原始css代碼不同,但是效果絕對相同。如果只顯示出css文件的文件名,下面無內(nèi)容,則說明E書沒有把這個css打包進去。

對于某些電子書,也可以試試下面這段代碼:

javascript:str='<HTML><HEAD><BASE HREF="';str+=document.URL;str+='"></HEAD><BODY><br>\n';c=document.styleSheets;for(i=0;i<c.length;i++){o=c[i];if (o.src=='')continue;str+='<a href="';str+=o.href;str+='">';str+=o.href;str+='</a><br>\n';};str+='</BODY></HTML>';document.write(str);

這段代碼自動對網(wǎng)頁進行檢查,如果網(wǎng)頁中嵌入了css文件,則自動顯示出css文件的下載鏈接,否則顯示一個空頁或無反應(yīng)。在鏈接上點鼠標右鍵再選“目標另存為”菜單,即可將文件保存到硬盤上。如果不能保存,可將js文件的URL復制到地址欄上,然后按回車試試。不過如果注冊表項HKEY_CLASSES_ROOT\CSSfile\shell下面有open、edit等子項,則獲得的css代碼會直接在open或edit子項指定的程序中打開而不是提示存盤。這種方法的適用范圍遠遠不如前面直接顯示的方法,不是所有電子書都能用的,但只要能用,得到的絕對是原汁原味的css代碼。

四、從E書或網(wǎng)頁中獲取鏈接進來的js文件

JavaScript沒有提供獲取js文件內(nèi)容的接口,因此首先要對注冊表進行改造:運行regedit,定位到HKEY_CLASSES_ROOT\.js,在它下面增加兩個字符串類型的值:
Content Type=application/x-javascript
PerceivedType=text
如果修改的時候不放心,可以參考HKEY_CLASSES_ROOT\.css的缺省設(shè)置,它們只是Content Type的值不同。注冊表改造是一次性的工作,改完就不用再動。

在改造完成后,用CtrlN抓取js文件的步驟與前述一般步驟相同,在步驟4中,將下面內(nèi)容復制、粘貼到地址欄上,然后按回車鍵即可看到內(nèi)容:

javascript:str='<HTML><HEAD><BASE HREF="';str+=document.URL;str+='"></HEAD><BODY><br>\n';c=document.scripts;for(i=0;i<c.length;i++){o=c[i];if (o.src=='')continue;str+='<a href="';str+=o.src;str+='">';str+=o.src;str+='</a><br>\n';};str+='</BODY></HTML>';document.write(str);

這段代碼自動對網(wǎng)頁進行檢查,如果網(wǎng)頁中嵌入了js文件,則自動顯示出js文件的下載鏈接,否則顯示一個空頁或無反應(yīng)。在鏈接上點鼠標右鍵再選“目標另存為”菜單,或直接點鏈接;即可將文件保存到硬盤上。如果不能保存,請先確認是否已經(jīng)按照上面說的方法對注冊表進行過設(shè)置;如果還不行,可以將js文件的URL復制到地址欄上,然后按回車試試。

比較怪異的是用eBook Workshop做的E書(頁面URL以ada99:開頭),在地址欄上敲入js文件的URL然后回車,會直接顯示出js文件內(nèi)容及其執(zhí)行結(jié)果,需要點“查看->源文件”菜單才可以獲得原始js文件代碼。不過這種書一般都用unEbookWorkshop反編譯了吧?

五、從E書或網(wǎng)頁中獲取Flash文件

對于Flash這種嵌入對象的文件,直接下載就可以,因此在前述一般步驟的步驟4中,將下面內(nèi)容復制、粘貼到地址欄上,然后按回車鍵即可看到內(nèi)容:

javascript:str='<HTML><HEAD><BASE HREF="';str+=document.URL;str+='"></HEAD><BODY><br>\n';c=document.all;for(i=0;i<c.length;i++){o=c[i];if(o.tagName!="OBJECT")continue;sih=o.innerHTML;nd=document.createDocumentFragment();nd.appendChild(document.createElement('<bod></body>'));nd.firstChild.outerHTML=sih;no=document.createElement(nd.firstChild.outerHTML);document.body.appendChild(no);str+='<a href="';str+=no.src;str+='">';str+=no.src;str+='</a><br>\n';};str+='</BODY></HTML>';document.write(str);

這段代碼自動對網(wǎng)頁進行檢查,如果網(wǎng)頁中嵌入了Flash對象,則自動顯示出swf文件的下載鏈接,否則顯示一個空頁或無反應(yīng)。在鏈接上點鼠標右鍵,選“目標另存為”,即可將文件保存到硬盤上。如果直接點擊鏈接,則會顯示出Flash畫面。

我經(jīng)??吹接腥藛枺骸霸鯓幼ト【W(wǎng)頁上的漂亮Flash?”,其實答案就是這么簡單,平時上網(wǎng)俺也經(jīng)常用這段代碼抓Flash,不過需要注意:如果頁面鑲嵌在frame中,則需要突破frame進入真正的頁面中才能使用這段代碼。另外這段代碼使用了createDocumentFragment方法,只能在IE 6上運行。

現(xiàn)在還有一種很極端的電子書:整本書只有一個網(wǎng)頁,里面嵌入了一個Flash文件作為目錄,點擊Flash中的鏈接,則轉(zhuǎn)入其它Flash文件,即真正的內(nèi)容藏在一堆Flash文件里。對于這種電子書,用上面的代碼一次只能抓到一個Flash,需要逐步點進去才能抓全,有的甚至要用flasm反編譯出抓到的Flash文件的運行腳本,再從腳本中找出它所鏈接的其它Flash文件的文件名(俺都是很卑鄙地直接搜索.swf),然后將文件名轉(zhuǎn)成絕對URL,即可生成下載鏈接。例如已知某Flash文件的絕對URL為http://ebook/pic.swf,則用下面的代碼可以單獨下載此文件:

javascript:document.write('<a href="http://ebook/pic.swf">右鍵另存為</a>');

這種方法每次都要改URL,當然比前面說的方法麻煩,但是有時候也只能用這種方法。順帶一提,flasm還真是個好東西,某些Flash文件在腳本中限制該文件只能在網(wǎng)絡(luò)上播放,不能從本地硬盤播放,也可以用它去除這種限制。

六、從E書或網(wǎng)頁中獲取背景音樂文件

背景音樂文件可以象Flash一樣直接下載,因此在前述一般步驟的步驟4中,將下面內(nèi)容復制、粘貼到地址欄上,然后按回車鍵即可看到內(nèi)容:

javascript:str='<HTML><HEAD><BASE HREF="';str+=document.URL;str+='"></HEAD><BODY><br>\n';c=document.all;for(i=0;i<c.length;i++){o=c[i];if(o.tagName!="BGSOUND")continue;str+='<a href="';str+=o.src;str+='">';str+=o.src;str+='</a><br>\n';};str+='</BODY></HTML>';document.write(str);

這段代碼自動對網(wǎng)頁進行檢查,如果嵌入了背景音樂,則自動顯示出背景音樂的下載鏈接,否則顯示一個空頁或無反應(yīng)。在鏈接上點鼠標右鍵,選“目標另存為”,即可將文件保存到硬盤上。

注意背景音樂一般隱藏在frame中(否則一換頁面音樂就被打斷了),如果彈出的頁面包含frame,而不是真正包含背景音樂鏈接的頁面,就會抓不到。這時還需要按后面說的步驟進入frame中的頁面。

另外有些E書為了避免單調(diào),會一次打包進去幾個midi文件,每次運行的時候隨機選擇一個作為背景音樂。對于這樣的E書,用上面的代碼只能抓到當前背景音樂。如果想抓全部,只能自己對網(wǎng)頁源代碼進行分析,組合出全部背景音樂的URL,然后在地址欄上輸入生成下載鏈接的JavaScript代碼再回車,一次下載一個。注意在下載鏈接上也只能點右鍵后選“目標另存為”,不能直接點鏈接。如果實在沒有本事對網(wǎng)頁源代碼進行分析,只能多運行幾回、多抓幾回了,正所謂“落后就要挨打”。示例:已知某音樂文件的絕對URL為http://ebook/1.mid,則生成下載鏈接的代碼為:
javascript:document.write('<a href="http://ebook/1.mid">右鍵另存為</a>');

七、從E書中獲取圖像文件

在前述一般步驟的步驟4中,將下面內(nèi)容復制、粘貼到地址欄上,然后按回車鍵即可看到內(nèi)容:

javascript:z=1;strUrl='';str='';function getImg(){if(strUrl!=''){str+=(z++);str+='. <IMG SRC="';str+=strUrl;str+='"><br><br>\n';};};c=document.images;for(i=0;i<c.length;i++){o=c[i];strUrl=o.src;getImg();};strUrl=document.body.background;getImg();c=document.all;for(i=0;i<c.length;i++){o=c[i];if(o.tagName=='TABLE'||o.tagName=='TD'){strUrl=o.background;getImg();};if(o.tagName=='AREA'){strUrl=o.href;getImg();};};document.write(str);

上面這段代碼會把網(wǎng)頁中能夠找到的圖片全部順序顯示出來。如果覺得圖片太多看起來不方便,或有某些小圖片看不清,也可以用下面這段代碼顯示圖片鏈接,點擊鏈接才顯示圖片:

javascript:z=1;strUrl='';str='';function getImg(){if(strUrl!=''){str+=(z++);str+='. <a href="';str+=strUrl;str+='">';str+=strUrl;str+='</a><br>\n';};};c=document.images;for(i=0;i<c.length;i++){o=c[i];strUrl=o.src;getImg();};strUrl=document.body.background;getImg();c=document.all;for(i=0;i<c.length;i++){o=c[i];if(o.tagName=='TABLE'||o.tagName=='TD'){strUrl=o.background;getImg();};if(o.tagName=='AREA'){strUrl=o.href;getImg();};};document.write(str);

由于代碼限制,隱藏在頁面js、css代碼中的圖片用上面的兩段代碼不能抓取,這時只能自己手工對HTML代碼進行分析,在地址欄上直接輸入圖片的絕對URL再回車,也能顯示出圖片。

另外由于javascript協(xié)議插件的能力限制,上面兩段代碼都沒有剔除重復鏈接,所以如果用這兩段代碼去抓BBS頁面上的圖,看到一大堆相同的圖片時請不要詫異。

在圖片或鏈接顯示出來后,只有極少數(shù)E書中的圖片可以直接另存為原始格式,絕大多數(shù)只能獲取解碼成Bitmap后的圖片,方法為:在圖片(注意是圖片,不能是鏈接,鏈接必須點進去顯示出圖片)上點右鍵,選“圖片另存為”菜單,即可將圖片保存成bmp文件,文件名缺省是“無標題.bmp”,需要手工改名。如果URL中指定的文件不是bmp,而是jpg、gif或png等,則還需要用ACDSee等軟件將保存下來的bmp轉(zhuǎn)換成要求的格式。jpg還好說,gif、png的透明色需要手工處理,動畫gif干脆就不要想了。

注意:如果只是對文件進行改名,沒有對文件格式進行轉(zhuǎn)換,在IE中將會顯示不出圖片。

平時上網(wǎng)的時候,也可以用上面的代碼抓取所瀏覽網(wǎng)頁的背景圖片,這個時候選“圖片另存為”,一般都能保存成原始格式。

從上面的敘述可以看出,在不使用IE內(nèi)部接口的情況下,抓取圖片可能是最麻煩,但效果又最差的一件苦差使。記得當年我就是因此一怒之下開始咬牙分析IE內(nèi)核源代碼的,還好最后終于獲得了回報。不知道在看了上面的說明后,會不會有人血性大發(fā),也走上當年我那條路?嘿嘿嘿……

八、進入frame頁面

上面給出的所有JavaScript代碼都是針對當前頁面的,也就是說,只有當前頁面中真的包含音樂文件、Flash文件,才能抓到所需的文件。如果是frame,就必須進入frame中的頁面,才能抓取。

檢測當前頁面是否是frame,最簡單的辦法就是按前述一般步驟進行操作,然后在步驟4中,將下面內(nèi)容復制、粘貼到地址欄上,然后按回車鍵:

javascript:str='<HTML><HEAD><BASE HREF="';str+=document.URL;str+='"></HEAD><BODY><br>\n';c=document.all;for(i=0;i<c.length;i++){o=c[i];if(o.tagName!='IFRAME'&&o.tagName!='FRAME')continue;str+=o.tagName;str+=' : <a href="';str+=o.src;str+='">';if(o.name=='')str+=o.src;else str+=o.name;str+='</a><br>\n';};str+='</BODY></HTML>';document.write(str);

這段代碼自動對網(wǎng)頁進行檢查,如果嵌入了frame(包括iframe),則自動顯示出frame中的頁面鏈接,否則顯示一個空頁或無反應(yīng)。直接點擊鏈接,即可進入相應(yīng)的頁面。

為了保證通用性,上面的代碼只對第一層frame進行檢查,這對iframe來說問題不大,因為不會有幾個正常人會去玩嵌套iframe;但對于普通frame來說,嵌套的可能性還是很大的,而上面的代碼需要一層層點進去才能見到嵌套frame,未免有點麻煩。解決的辦法就是:如果用上面代碼顯示的全是FRAME,沒有IFRAME,則可以用下面的代碼顯示全部嵌套frame:

javascript:str='';function getFrame(c,i,j){for(i=0;i<c.length;i++){o=c[i];for(k=0;k<j;k++)str+='&nbsp;&nbsp;';str+='<a href="';str+=o.location;str+='">';if(o.name!='')str+=o.name;else str+=o.location;str+='</a><br>\n';no=o.document.frames;if(no.length>0)getFrame(no,0,j+1)};};getFrame(document.frames,0,0);document.write(str);

這段代碼自動對網(wǎng)頁進行檢查,顯示出嵌套frame中所有頁面的鏈接及嵌套關(guān)系,沒有frame則顯示一個空頁或無反應(yīng)。直接點擊鏈接,即可進入相應(yīng)的頁面。注意如果頁面中含有iframe,則上面的代碼可能會出錯,所以才要先用第一段代碼檢查一下有沒有iframe。

如果網(wǎng)頁中采用了js代碼對frame進行檢測,導致網(wǎng)頁不能脫離frame運行,則為了獲得嵌入frame頁面中的內(nèi)容,可以在用上面的代碼顯示出frame頁面鏈接后,直接在頁面鏈接上點右鍵選“目標另存為”,保存出HTML代碼后再手工編輯或用TextForever等工具輔助編輯。

miniKillEBook v1.04以前的版本存在一個疏忽:我光想到處理FRAME,忘記處理IFRAME,因此在某些人中開始流傳這樣一種說法:將網(wǎng)頁嵌入IFRAME,即可避免被miniKillEBook反編譯。在v1.04出來之后,這種說法就真的只能成為傳說了。

九、其它問題

Q:如果按下Ctrl+N鍵后,彈出的IE窗口沒有菜單、地址欄,怎么辦?
A:從CtrlN ver 1.03開始,提供一個可以打開/關(guān)閉的“高級界面”,通過里面的“Script命令”功能,可以直接將要執(zhí)行的JavaScript代碼推送到IE窗口中執(zhí)行,不用再在地址欄輸入。

Q:如果E書起來后禁止了Windows的復制、粘貼功能,上面的js代碼好長,不想一個字符一個字符敲,怎么辦?
A:從CtrlN ver 1.03開始,提供一個可以打開/關(guān)閉的“高級界面”,通過里面的“Script命令”功能,可以直接將要執(zhí)行的JavaScript代碼或URL推送到IE窗口中執(zhí)行,不用再在地址欄輸入。如果您寫了自己的JavaScript代碼,也可以將它加到CtrlN.spt文件(純文本文件)中,這樣以后可以在Script命令選擇窗口中直接選擇。

附錄 版本更新記錄

Version 1.01
按照CtrlN ver 1.03的新增功能,對文檔進行了修訂。

相關(guān)文章

最新評論