用JavaScript获取网页中的js、css、Flash等文件

javascript:document.write('<a href="http://ebook/1.mid">右键另存为</a>');

七、从E书中获取图像文件

在前述一般步骤的步骤4中,将下面内容复制、粘贴到地址栏上,然后按回车键即可看到内容:

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);

上面这段代码会把网页中能够找到的图片全部顺序显示出来。如果觉得图片太多看起来不方便,或有某些小图片看不清,也可以用下面这段代码显示图片链接,点击链接才显示图片:

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协议插件的能力限制,上面两段代码都没有剔除重复链接,所以如果用这两段代码去抓BBS页面上的图,看到一大堆相同的图片时请不要诧异。

在图片或链接显示出来后,只有极少数E书中的图片可以直接另存为原始格式,绝大多数只能获取解码成Bitmap后的图片,方法为:在图片(注意是图片,不能是链接,链接必须点进去显示出图片)上点右键,选“图片另存为”菜单,即可将图片保存成bmp文件,文件名缺省是“无标题.bmp”,需要手工改名。如果URL中指定的文件不是bmp,而是jpg、gif或png等,则还需要用ACDSee等软件将保存下来的bmp转换成要求的格式。jpg还好说,gif、png的透明色需要手工处理,动画gif干脆就不要想了。

注意:如果只是对文件进行改名,没有对文件格式进行转换,在IE中将会显示不出图片。

平时上网的时候,也可以用上面的代码抓取所浏览网页的背景图片,这个时候选“图片另存为”,一般都能保存成原始格式。

从上面的叙述可以看出,在不使用IE内部接口的情况下,抓取图片可能是最麻烦,但效果又最差的一件苦差使。记得当年我就是因此一怒之下开始咬牙分析IE内核源代码的,还好最后终于获得了回报。不知道在看了上面的说明后,会不会有人血性大发,也走上当年我那条路?嘿嘿嘿……

八、进入frame页面

上面给出的所有javascript代码都是针对当前页面的,也就是说,只有当前页面中真的包含音乐文件、Flash文件,才能抓到所需的文件。如果是frame,就必须进入frame中的页面,才能抓取。

检测当前页面是否是frame,最简单的办法就是按前述一般步骤进行操作,然后在步骤4中,将下面内容复制、粘贴到地址栏上,然后按回车键:

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);

这段代码自动对网页进行检查,如果嵌入了frame(包括iframe),则自动显示出frame中的页面链接,否则显示一个空页或无反应。直接点击链接,即可进入相应的页面。

为了保证通用性,上面的代码只对第一层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+='  ';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);

这段代码自动对网页进行检查,显示出嵌套frame中所有页面的链接及嵌套关系,没有frame则显示一个空页或无反应。直接点击链接,即可进入相应的页面。注意如果页面中含有iframe,则上面的代码可能会出错,所以才要先用第一段代码检查一下有没有iframe。

如果网页中采用了js代码对frame进行检测,导致网页不能脱离frame运行,则为了获得嵌入frame页面中的内容,可以在用上面的代码显示出frame页面链接后,直接在页面链接上点右键选“目标另存为”,保存出HTML代码后再手工编辑或用TextForever等工具辅助编辑。

miniKillEBook v1.04以前的版本存在一个疏忽:我光想到处理FRAME,忘记处理IFRAME,因此在某些人中开始流传这样一种说法:将网页嵌入IFRAME,即可避免被miniKillEBook反编译。在v1.04出来之后,这种说法就真的只能成为传说了。

九、其它问题

Q:如果按下Ctrl+N键后,弹出的IE窗口没有菜单、地址栏,怎么办?
A:从CtrlN ver 1.03开始,提供一个可以打开/关闭的“高级界面”,通过里面的“Script命令”功能,可以直接将要执行的javascript代码推送到IE窗口中执行,不用再在地址栏输入。

Q:如果E书起来后禁止了Windows的复制、粘贴功能,上面的js代码好长,不想一个字符一个字符敲,怎么办?
A:从CtrlN ver 1.03开始,提供一个可以打开/关闭的“高级界面”,通过里面的“Script命令”功能,可以直接将要执行的javascript代码或URL推送到IE窗口中执行,不用再在地址栏输入。如果您写了自己的javascript代码,也可以将它加到CtrlN.spt文件(纯文本文件)中,这样以后可以在Script命令选择窗口中直接选择。

附录 版本更新记录

Version 1.01
按照CtrlN ver 1.03的新增功能,对文档进行了修订。

此条目发表在网页制作分类目录,贴了标签。将固定链接加入收藏夹。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注