这份代码的核心思路是:隐形零宽字符(专治爬虫) + 版权声明(法律威慑),同时提供一个开关让你选择是否开启“可见乱码”(防人工搬运)。
代码效果说明
| 防护层 | 作用对象 | 效果 |
|---|---|---|
| 防护层 | 作用对象 | 效果 |
隐形零宽字符(\u200B) | 初级爬虫(正则匹配、关键词提取) | 爬虫抓取的文本中间有看不见的字符,关键词搜索直接失效,入库后数据变脏,无法直接使用。 |
头尾隐形符(\u200C / \u200D) | 爬虫首尾匹配 | 破坏爬虫提取标题/摘要时的前后锚点。 |
| 版权声明 | 所有搬运者(含AI) | 即使对方用AI清洗掉乱码,版权文字依然存在。若盗用,你有明确的法律追责证据。 |
| 可见乱码(可选) | 手动CTRL+C/V的普通人 | 复制出来带“防盗转载”字样,增加手动删除的心理成本。(默认关闭,避免影响真实用户体验) |
如何放置到你的网站
- 纯HTML页面:把
<script>标签里的全部代码,放到</body>之前。 - WordPress/织梦等后台:放到主题的
footer.php文件里(</body>前)。 - Vue/React项目:放到
mounted或useEffect生命周期里。 - Typecho等项目:放到
主题相关设置里面。
再次提醒(诚实告知)
防不住高级工程师:他们能写脚本去掉零宽字符(替换 \u200B 为空)。
防不住AI:DeepSeek/GPT 一次提示词就能还原原文。
它真正能防住的:99%的批量搬运脚本和懒得折腾的采集站长。只要你的同行没做防护,爬虫就会优先绕过你,去偷他们。
如果你想把 ENABLE_VISIBLE_JAMMER 调成 true 看看效果,或者想修改版权文字、调整干扰字符密度,直接改配置区就行。
<!-- ========= 防爬虫 + 干扰码 + 版权代码 ========= -->
<script>
document.addEventListener('copy', function (e) {
const selection = window.getSelection();
const rawText = selection.toString().trim();
if (rawText.length === 0) return;
e.preventDefault();
// ==================== 配置区 ====================
const SITE_NAME = '子夜歌'; // 修改为你的名称
const ENABLE_VISIBLE_JAMMER = true; // true=可见乱码, false=仅隐形(推荐false)
// ==============================================
// 1. 生成【可见干扰码】(防人工手动搬运,影响阅读体验,建议谨慎开启)
let displayText = rawText;
if (ENABLE_VISIBLE_JAMMER) {
const jammers = [
// ===== 高频虚词 / 助词(自然融入) =====
'的', '地', '得', '了', '过', '着', '也', '和', '与', '或',
'但', '而', '等', '之', '其', '所', '以', '于', '中', '上',
'下', '不', '是', '有', '在', '这', '那', '个', '种', '些',
'来', '去', '就', '都', '说', '要', '会', '可', '以', '后',
'前', '内', '外', '时', '间', '对', '向', '从', '为', '因',
// ===== 原版权警示字(保留威慑) =====
'防', '盗', '转', '载', '严', '究', '禁', '止', '抄', '袭',
'版', '权', '保', '护'
];
let tmp = '';
const chars = rawText.split('');
chars.forEach((char, index) => {
tmp += char;
// 每隔3个字符插一个干扰字
if (index % 3 === 0 && index < chars.length - 1) {
tmp += jammers[Math.floor(Math.random() * jammers.length)];
}
});
displayText = '【防盗】' + tmp + '【禁转】';
}
// 2. 【核心防爬】插入隐形零宽字符(专治爬虫正则匹配和数据库存储)
// \u200B = 零宽空格, \u200C = 零宽不连字, \u200D = 零宽连字
let finalText = displayText.split('').join('\u200B'); // 每个字符间插入隐形空格
finalText = '\u200C' + finalText + '\u200D'; // 头尾再加隐形符
// 3. 追加【版权声明】(保留证据,法律威慑)
const copyright = `\n\n━━━━━━━━━━━━━━━━━━━━\n📌 本文首发于 ${SITE_NAME}ziyege.com\n🔗 原文链接:${window.location.href}\n⚠️ 未经授权禁止转载,违者必究\n━━━━━━━━━━━━━━━━━━━━`;
// 4. 写入剪贴板
e.clipboardData.setData('text/plain', finalText + copyright);
// 可选:给用户一个轻提示(非必须)
// alert('已复制,转载需保留版权信息');
});
</script>
暂无评论