标题: 未登录时复制CSDN某些页面中的代码 创建: 2022-08-08 16:33 更新: 2023-06-12 15:55 链接: https://scz.617.cn/web/202208081633.txt CSDN有些页面,未登录时无法复制其中的代码。假设用Chrome,在地址栏输入 javascript:document.body.contentEditable=true 之后无需登录即可复制。但是,copy/paste上述内容到地址栏时,"javascript:"被 自动切掉了,必须键盘输入补全"javascript:",否则就变成用缺省搜索引擎搜索 "document.body.contentEditable=true"。 或者F12,在Console中输入 document.body.contentEditable=true Firefox好像不支持上述用法,无论是地址栏还是Console,均未试成功。 下面是些不相关的内容。在Chrome、Firefox地址栏输入 data:text/html, 之后当前空白页面变成类似notepad的效果,可在其中输入文字并编辑之,将浏览器 临时当成TXT编辑器用。 2023-05-29 14:54 CSDN的JavaScript防护增强过,如今为达目的,需要其他奇技淫巧。 -------------------------------------------------------------------------- a) F12->Settings->Preferences->Debugger->Disable JavaScript (勾选) 再在Console中输入 document.body.contentEditable=true 之后可对任意片段选中、复制。 在F12中临时全局禁用JavaScript,除了上述办法,还可以 F12 Run command (Ctrl-Shift-P) 输入JavaScript (这是个过滤器) 选中"Disable JavaScript" 禁用JavaScript只解决复制,未解决选中,需与contentEditable配合。 b) 在Console中输入 window.oncontextmenu=document.oncontextmenu=document.oncopy=null;[...document.querySelectorAll('body')].forEach(dom=>dom.outerHTML=dom.outerHTML);[...document.querySelectorAll('body, body *')].forEach(dom=>{['onselect','onselectstart','onselectend','ondragstart','ondragend','oncontextmenu','oncopy'].forEach(ev=>dom.removeAttribute(ev));dom.style['user-select']='auto';}); 之后可对任意片段选中、复制,该法无需临时全局禁用JavaScript。 c) 上面这段代码较长,图省事的话,在Console中输入 document.designMode='on' 之后仍无法对任意片段选中、复制,但可以Ctrl-A/Ctrl-C,全选全复制,包括之前 不允许选中、复制的片段。 -------------------------------------------------------------------------- 你可能看到过这种方案,在无法选中的片段点击鼠标右键,选择"检查",呼出开发者 工具,并直接定位到相应位置,这与直接F12相比有优势。然后 Elements->Styles->Filter->输入"content_views",这会看到 -------------------------------------------------------------------------- #content_views pre code { -webkit-touch-callout: none; -webkit-user-select: none; // 缺认勾选,现在清空 -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; // 缺认勾选,现在清空 } #content_views pre { -webkit-touch-callout: none; -webkit-user-select: none; // 缺认勾选,现在清空 -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; // 缺认勾选,现在清空 } -------------------------------------------------------------------------- 之后可以选中目标内容,仍然无法复制。该操作很无聊,只解决了选中,未解决复制, 实际效果不超出"document.body.contentEditable=true",不推荐。 有人可能会问,既已如此麻烦,为何不登录?这是个好问题,但我不回答。至于CSDN 是否值得这么折腾,亦不在此讨论,你若是无此需求,忽略即可。 2023-05-29 16:32 tk "document.body.contentEditable=true"其实还能用,别Ctrl-C,要Ctrl-X。试了一 下,Cut走了,这招可真够歪的。tk评论,我估计是设计这套体系时只考虑了防复制, 没考虑防剪切,因为正常情况下网页是不能剪切的。 2023-05-30 网友UID(1077232180)提到某Chrome插件,他说可破CSDN、360文库、百度文库。 Enable Copy Paste - E.C.P https://chrome.google.com/webstore/detail/enable-copy-paste-ecp/fpjppnhnpnknbenelmbnidjbolhandnf?hl=en-US 该插件开发者信用度好像不错。相比之下,另几个类似的插件,评论区有人吐槽可疑 行为。 参看 《如何查看Chrome插件js源码》 https://scz.617.cn/web/202305310924.txt 重点看这几个js源码 content_script\enable_copy.js content_script_web_accessible\ecp_regular.js content_script_web_accessible\ecp_aggressive.js 其中的代码逻辑对我太难了,看不懂,不会WEB前端。enable_copy.js是主要代码所 在,其中有对webkit-user-select、user-select的处理,有一堆Event Listeners, 比如 -------------------------------------------------------------------------- 'copy', 'cut', 'contextmenu', 'paste', 'keydown', 'keyup', "selectstart", "select", "dragstart", "drag", 'mousedown', 'mouseup', 'DOMAttrModified', 'DOMNodeInserted', 'DOMNodeRemoved', 'DOMCharacterDataModified', 'DOMSubtreeModified', -------------------------------------------------------------------------- 针对各种键盘、鼠标事件,会做一些动作,比如 -------------------------------------------------------------------------- event.stopPropagation(); event.stopImmediatePropagation(); setTimeout(function () { document.oncontextmenu = null; }, 2000); -------------------------------------------------------------------------- stopPropagation()会阻止事件向上层元素传播,从而避免触发上层元素的事件监听 器。它有个更激进的AggressiveMode,启用后,额外干这些事 -------------------------------------------------------------------------- document.onselectstart = null; document.body.onselectstart = null; document.ondragstart = null; document.body.ondragstart = null; document.onmousedown = null; document.body.onmousedown = null; document.oncontextmenu = null; document.body.oncontextmenu = null; document.body.oncopy = null; document.body.oncut = null; document.body.onpaste = null; -------------------------------------------------------------------------- 该插件会影响很多网站的正常行为,所以使用方面有讲究,比如只对需要对抗的网站 启用该插件。查看插件管理页 chrome://extensions/?id=fpjppnhnpnknbenelmbnidjbolhandnf 允许此扩展程序读取和更改您在所访问的网站上留存的所有数据,此处有三种选项, 分别是 点击时 在特定网站上 在所有网站上 缺省是"在所有网站上",根据实际需要,或可选用前两种。实测CSDN,还可以。实测 百度文库,非常不理想,很难生效。百度文库比较恶心,若启用对抗措施,会导致文 本内容转图片,对此有一种缓解方案。假设前述插件在无痕模式也启用中,在无痕模 式打开百度文库某URL,正在加载的半途,点击"停止加载此页",就是左上角动态出 现的叉;此时网页中受对抗措施影响的某些JavaScript尚未得到执行,网页内容保持 在文本状态,未转成图片,右键可选择、复制。此法只适合前几页内容。 这类插件很多,此处只是提一嘴,不做测评对比。或许有其他完美插件对付百度文库, 我没这需求,也不敢贸然用之,至少ECP插件代码可信。 2023-05-31 17:19 网友UID(3664607574)搜到一歪招,无对抗措施时访问百度文库,选中欲复制的内容, 会弹出一个百度自定义栏,点击其中的"翻译",会出现中译英结果,再点"百度翻译", 之后打开的页面上已有原中文内容,可随意复制。 某公众号网友提及另一歪招,选中欲复制的内容,弹出百度自定义栏,点击其中的 "搜索",之后打开一个文库搜索页面,在搜索栏有被选中的内容,可复制。无论选中 多少内容,搜索栏中出现的内容有很短的长度限制,上限32个汉字左右,使得此法实 用性极低,并不推荐。 非IT人士可截图到微信中,用微信自带OCR析取文字。 2023-06-03 网友UID(2025131864)提到,用IE(不是Edge)打开百度文库,Ctrl-C直接可用。试了 一下,确实如此,但只有第1页可见。现在Win10/Win11调出IE不是件容易的事,Win7 另说。用Edge的IE模式也有此效果,参看 《Win11如何启动IE》 https://scz.617.cn/windows/202211241540.txt 云海提到Edge有个「沉浸式阅读器模式」。说一种进该模式的办法,先打开目标网页, 在地址栏URL最前部手动添加「read:」,最终形如 read:https://wenku.baidu.com/... 回车后,该页面以「沉浸式阅读器模式」展现,可复制百度文库第一页文字内容。按 F9退出「沉浸式阅读器模式」。现在UI变化较大,前述办法普适,其他办法没这么普 适。 2023-05-31 16:47 网友UID(2940565691)评论,F12模拟移动设备可复制百度文库,有多种套路。 在Chrome中打开URL,F12,点击"Toggle device toolbar (Ctrl-Shift-M)"模拟移动 设备,F5(刷新)或Ctrl-F5(硬刷新)原页面,退出F12。此刻已能选择原页面内容,没 有右键菜单,但能Ctrl-C复制选中的内容。此法与ECP插件或其他对抗措施无关,裸 试即可。 F12->More tools->Network conditions->User agent->Use browser default,缺省 选中,清空后更改UA为某手机。刷新原页面,此刻已能选择原页面内容,没有右键菜 单,Ctrl-C会触发保护。可在Console中"document.body.contentEditable=true", 之后tk的猥琐大法Ctrl-X生效。也可"Disable JavaScript"之后Ctrl-C。换句话说, 原页面移动版也有保护措施,但比PC版保护措施弱一些。F12换UA、禁JavaScript的 效果只在F12状态有效,离开F12就恢复默认状态,"contentEditable=true"离开F12 后仍有效。百度文库比较特殊,长内容会分成多页,Ctrl-X剪切掉第1页后,第2页会 自动提升上来,从而可剪切第2页,依次类推,可获取所有隐藏页内容,这是Ctrl-C 所不具备的优势。 亦可用"User-Agent Switcher for Chrome"之类的插件更改UA,但不知为何,Ctrl-X 剪切掉前几页,后续页未自动提升上来,此法无优势。 最后推荐这个组合对付百度文库 F12 Toggle device toolbar (Ctrl-Shift-M) Ctrl-F5 document.body.contentEditable=true Ctrl-X 此事与下载百度文库内容并非强相关,有这功夫,去淘宝代下更方便,充个会员是正 途。记于此间,只是永远好奇的心。