是不是经常在网上遇到一些无法复制的文章?那么问题来了,有什么办法可以绕开这种限制,将网页内容轻松下载下来呢?
其实,既然是网页内容,那么意味着HTML代码是公开的,将相关文本复制下来根本不是问题,一起来看看要怎么做吧。
1
手机拍照识别
难度:●○○○○
效果:●●●●○
这是最简单的一个办法了,如今手机都自带文字识别功能。首先用QQ或微信将要识别的网页截取成图片,发送到你的手机。然后打开手机“扫一扫”,选择刚刚收到的网页截图,最后点击“识别文字”就可以了。
一般来说,只要你的照片足够清晰,字体基本标准,那么实现95%以上的识别率还是不成问题的。稍后通读一下文章,将里面的识别错误简单修正一下,就能直接生成文件使用了。
2
切换IE内核
难度:●○○○○
效果:●●●○○
很多小伙伴都忽略过这个办法,如今IE已经被边缘化,绝大多数浏览器都是WebKit内核,网页设计师也是一样,因此当你发现一个网站设置了禁止复制时,不妨将网址拖拽到IE浏览器里试一试,没准会有意外惊喜!
顺便说一句,如今很多国产浏览器都使用了双内核,其中“兼容模式”就是IE核心,点击切换试一试吧,和拷贝到IE里是一个效果!
3
查看源代码
难度:●●●●○○
效果:●●●●○○
如果借助上一种方法“捡漏”不成功,那么就得动用一些“大招”了!这个方法基本可以搞定90%以上的网站,但操作起来稍微麻烦了一点。
1、在禁止复制的网页上右击鼠标,选择“查看源代码”:
2、将打开的源码页面下拉,找到带有文字内容的区域。选中这个区域,将内容粘贴到Word文档中:
3、 直接粘贴过来的内容会夹杂很多不必要的代码,这时就是“查找与替换”大显身手的时候了,将要删除的代码复制到查找框内,然后将替换为设空,最后点击“全部替换”按钮,直至代码全部删除为止:
4
保存网页格式
难度:●●○○○○
效果:●●●●●○
这其实是上一种方法的“人性化”版,至少没有看起来很头疼的代码页了,而且它可以用在那些禁止鼠标右键的网页中。
打开禁止复制的网页,按快捷键Ctrl+S,在弹出的保存对话框中选择“网页,仅HTML”。双击保存好的网页文件,这时你会发现原本无法复制的内容已经可以正常拷贝了。
5
打印法
难度:●●●●●○
效果:●●●●●○
这个方法只能用于WebKit内核浏览器(包括国产多数双核浏览器),只要在禁止复制的网页上按快捷键Ctrl+P,进入打印预览模式,就能直接通过鼠标完成复制操作。
6
插件法
难度:●●●●●○
效果:●●●●●○
如果上面的这些方法都不奏效,或者操作步骤太繁琐,这里还有一个终极大法,那就是借助插件完成。类似的插件有很多,比如Enable Copy,操作时只要将它安装到浏览器上,遇到有复制限制的页面点击一下,就能轻松破解这些限制,具体的大家可以自行尝试一下。
我们学习了 HTML 提供的原生拖放(drag & drop)后,是时候想一想这个东西可以用来作什么,可以在什么时候使用,使用的场景等等
场景分析
当我们在注册成功一个账户时,一般网站会让我们上传我们的用户头像,或者在实名认证的时候会涉及到身份证图片上传到等,这时候我们可以使用input提供的file属性进行选择本地文件进行上传。
我们再想一下,当在电脑端的情况下,当用户打开文件选择框时再寻找图片对应的文件夹,再进行选取文件的时候是不是会有点麻烦呢?我们可不可以让用户找到图片文件,直接引入实现上传呢?答案是可以的。
怎么做
经过这些分析后,我们可以尝试使用 HTML5 提供的拖拽,使得目标元素增加读取文件功能,然后使用 ajax 实现图片上传。
谈一谈我们需要使用到的技术:
HTML5 拖拽事件
关于 Drag & Drop 拖拽事件,之前我写过一篇专门介绍的文章,HTML5-拖拽,大家有兴趣的话可以点击链接查看,我在这里就不在多啰嗦了~下面直接出拖拽上传的简要代码示例
var oDragWrap=document.body; //拖进 oDragWrap.addEventListener( "dragenter", function(e) { e.preventDefault(); }, false ); //拖离 oDragWrap.addEventListener( "dragleave", function(e) { dragleaveHandler(e); }, false ); //拖来拖去 , 一定要注意dragover事件一定要清除默认事件 //不然会无法触发后面的drop事件 oDragWrap.addEventListener( "dragover", function(e) { e.preventDefault(); }, false ); //扔 oDragWrap.addEventListener( "drop", function(e) { dropHandler(e); }, false ); var dropHandler=function(e) { //将本地图片拖拽到页面中后要进行的处理都在这 };
获取文件数据 HTML5 File API
File API 中的 FileReader 接口,作为 File API 的一部分,FileReader 专门用来读取文件。我们在这里主要介绍一些 File API 中的 FileList 接口,它主要通过两个途径获取本地文件列表,一是<input type="file"/>的表单形式,另一种则是e.dataTransfer.files拖拽事件传递的文件信息。
var fileList=e.dataTransfer.files;
使用 files 方法将会获取到拖拽文件的数组形式的数据,每个文件占用一个数组的索引,如果索引不存在文件数据,将返回 Null。可以通过length属性获取文件的数量。
var fileNum=fileList.length;
拖拽上传需要注意的是需要判断两个条件
// 检测是否是拖拽文件到页面的操作 if (fileList.length===0) { return; } // 检测文件是不是图片 if (fileList[0].type.indexOf("image")===-1) { return; }
下面我们看看结合之前的拖拽事件,来实现拖拽图片并在页面中预览
var dropHandler=function(e) { e.preventDefault(); //获取文件列表 var fileList=e.dataTransfer.files; //检测是否是拖拽文件到页面的操作 if (fileList.length==0) { return; } //检测文件是不是图片 if (fileList[0].type.indexOf("image")===-1) { return; } //实例化file reader对象 var reader=new FileReader(); var img=document.createElement("img"); reader.onload=function(e) { img.src=this.result; oDragWrap.appendChild(img); }; reader.readAsDataURL(fileList[0]); };
当完成以上操作后,相信你可以成功的完成了拖拽图片预览的操作。当你查看 img 标签时会发现,img的src属性是一个超长的文件二进制数据,当你需要很多这种的img元素时,建议将展示区域脱离文档流,让其绝对定位减少页面的 reflow
AJAX 上传图片
既然已经获取到拖拽到web页面中的图片数据了,下一步就是将其发送到服务器端。
总结
.进入打印预览;
2.禁用Java脚本;
3.直接拖动到Word;
4.使用冰点下载器;
5.应用一键读图插件;
6.百度快照;
7.百度翻译;
8.以“HTML”类型保存(Ctrl+S)。
以上几个办法可能会因不同的网站,不同的浏览器,不同的时期而有所不同,但确实可以解决很多问题。经亲测,总会有一种是能用的。希望能帮到您。
*请认真填写需求信息,我们会在24小时内与您取得联系。