|
去年冬天我想查一份1998年的何破地方志,在某个文库网站上找到了扫描版,解付标价28元。费文付款前我习惯性按了F12,何破打开开发者工具,解付发现整页文字其实已经加载在DOM里了,费文只是何破上面盖了一层半透明的遮罩,加上一段禁止复制的解付JavaScript。右键被禁用,费文Ctrl+C没反应。何破我直接在控制台输入了一行代码,解付把那个遮罩层删掉,费文文字就全露出来了。何破整个过程不到十秒。解付 这不是费文什么高深技术。大多数付费文档网站的前端防护,本质上是"防君子不防小人"。它们把内容渲染到浏览器里,再用CSS和JS做视觉遮挡和操作限制。既然内容已经到达你的设备,你就有办法把它留下来。 最直接的路:打印成PDF 很多网站允许你预览全文,只是不让你复制。这时候Ctrl+P打开打印对话框,在目标打印机里选择"另存为PDF",往往能直接导出完整内容。有些网站会针对打印做样式优化,把正文隐藏掉——那就需要在打印预览里检查一下,如果内容缺失,换一种方式。 Chrome的打印预览有个"更多设置",可以关掉"页眉和页脚",调整缩放比例。如果打印出来是空白,说明网站用了@media print规则隐藏内容。打开开发者工具,在Elements面板里找到那条CSS规则,取消勾选,再打印就行了。 开发者工具是你的朋友 前面提到的遮罩层是最常见的手法。具体操作:右键检查元素,找到覆盖在文字上方的那层div,通常class名里带"mask""overlay""shade"之类的词,选中它,按Delete键。文字立刻可选可复制。 如果网站禁用了右键,也有办法绕过。在控制台里输入document.oncontextmenu = null,回车,右键菜单就恢复了。禁用复制的原理类似,通常是绑定了copy事件,用document.oncopy = null解除。有些网站更粗暴,直接监听keydown事件拦截Ctrl+C,那就找到对应的事件监听器删掉,或者干脆在控制台里用document.body.innerText把整页文本提取出来。 还有一种情况:文字被拆成单个字符分别放在不同的span里,复制出来顺序混乱。这是为了防止爬虫,但对人来说也不方便。解决办法是在控制台里遍历所有span,按DOM顺序拼接文本。写个简单的循环就行。 截图加OCR,笨但有效 有些文档是图片格式,或者用了canvas渲染,DOM里根本没有文字。这时候只能截图,然后用OCR工具识别。微信自带的截图OCR就够用,识别率不错。白描、天若OCR这些工具也成熟。如果页数多,写个脚本自动翻页截图,再批量识别,半小时能搞定几百页。 我试过用Python的Selenium做自动翻页截图,配合PaddleOCR识别,效果挺好。代码不复杂,核心就是定位翻页按钮,循环点击、截图、保存。唯一麻烦的是有些网站会检测自动化工具,需要加一些反检测的配置。 该不该这么做 技术上可行不代表道德上没问题。我自己的原则是:用于个人学习、研究、偶尔查阅,可以接受;批量下载后传播或商用,那就是另一回事了。很多文档的定价其实不高,几块到几十块,如果确实需要频繁使用,付费支持一下创作者也是应该的。技术手段更多是应对那些已经付费却被限制复制、或者内容本身属于公共领域却被平台圈起来收费的情况。 说到底,前端防护拦不住真正想拿内容的人,它拦住的只是那些不知道按F12的人。 |