F12打开开发者模式,上方栏目选择控制台,输入需要进行的脚本。
注意备份!!!
2.0
(function() {
const CLICK_INTERVAL_MS = 80;
const SUCCESS_KEYWORDS = ['领取成功', '成功领取', '已领取'];
const _0x4f = [0x4f51];
const _0x62 = ['NWwyYzZJQ0Y3N3lhNUx5Wg=='];
const AUTHOR = String.fromCharCode(_0x4f[0]);
const ENCRYPTED_AUTHOR = atob(_0x62[0]);
const QUOTES = [
'✨ 此即,智慧之殿堂!—— 纳西妲',
'🍖 牛福永恒,吃饱喝好!',
'⚡ 稻光,亦是永恒!—— 雷电将军',
'🎲 愿风神忽悠你!—— 温迪',
'🌊 牛福如水,福泽绵长。',
'🔥 天动万象!—— 钟离',
'🍜 牛福面馆,今日特供。',
'🌙 月光点亮的时候,牛福会保佑你。'
];
let successCount = 0;
let intervalId = null;
let isRunning = false;
let processedMessages = new WeakSet();
let lastModalTime = 0;
const MODAL_COOLDOWN_MS = 2000;
function showAntiFakeModal() {
const now = Date.now();
if (now - lastModalTime < MODAL_COOLDOWN_MS) return;
lastModalTime = now;
const oldModal = document.getElementById('anti-fake-modal');
if (oldModal) oldModal.remove();
const randomQuote = QUOTES[Math.floor(Math.random() * QUOTES.length)];
const modal = document.createElement('div');
modal.id = 'anti-fake-modal';
modal.style.cssText = `
position: fixed; bottom: 90px; right: 20px; z-index: 1000000;
background: rgba(20, 25, 40, 0.9); color: #f0e6d2;
border: 1px solid #c9aa7b; border-radius: 16px;
padding: 16px 20px; font-family: 'Segoe UI', 'Microsoft YaHei', sans-serif;
box-shadow: 0 8px 24px rgba(0,0,0,0.5); backdrop-filter: blur(6px);
min-width: 260px; pointer-events: none;
animation: fadeSlideIn 0.3s ease-out;
`;
modal.innerHTML = `
<div style="display: flex; align-items: center; gap: 8px; margin-bottom: 10px;">
<span style="font-size: 22px;">👤</span>
<span style="font-weight: bold; letter-spacing: 1px;">作者:${AUTHOR}</span>
<span style="margin-left: auto; font-size: 12px; opacity: 0.7;">防伪认证</span>
</div>
<div style="background: #2a2f42; border-radius: 8px; padding: 8px 12px; margin-bottom: 12px; font-family: monospace; font-size: 13px; border-left: 4px solid #d4af37;">
🔐 ${ENCRYPTED_AUTHOR}
</div>
<div style="font-style: italic; color: #ffd966; text-align: right; border-top: 1px dashed #5a5f72; padding-top: 10px;">
“${randomQuote}”
</div>
<div style="margin-top: 6px; font-size: 12px; text-align: right; opacity: 0.6;">
🎉 累计成功 ${successCount} 次
</div>
`;
const style = document.createElement('style');
style.textContent = `
@keyframes fadeSlideIn {
from { opacity: 0; transform: translateY(20px); }
to { opacity: 1; transform: translateY(0); }
}
`;
if (!document.querySelector('#anti-fake-style')) {
style.id = 'anti-fake-style';
document.head.appendChild(style);
}
document.body.appendChild(modal);
setTimeout(() => { if (modal.parentNode) modal.remove(); }, 6000);
}
function clickReceive() {
const btns = document.querySelectorAll('button');
for (let btn of btns) {
const text = (btn.innerText || btn.textContent || '').trim();
if (text === '领取' || text.includes('领取')) {
btn.click();
return;
}
}
}
function setupObserver() {
const observer = new MutationObserver((mutations) => {
for (const m of mutations) {
for (const node of m.addedNodes) {
if (node.nodeType !== 1) continue;
const msg = node.classList?.contains('ant-message-notice')
? node
: node.querySelector?.('.ant-message-notice');
if (msg && !processedMessages.has(msg)) {
processedMessages.add(msg);
const txt = msg.innerText || '';
if (SUCCESS_KEYWORDS.some(k => txt.includes(k))) {
successCount++;
console.log(`✅ 领取成功!累计成功: ${successCount} 次`);
showAntiFakeModal();
}
}
}
}
});
observer.observe(document.body, { childList: true, subtree: true });
return observer;
}
let observer = null;
function start() {
if (intervalId) return;
if (!observer) observer = setupObserver();
isRunning = true;
intervalId = setInterval(() => {
try { clickReceive(); } catch(e) {}
}, CLICK_INTERVAL_MS);
console.log(`🚀 极速自动领取已启动,间隔 ${CLICK_INTERVAL_MS} ms`);
updateButton(true);
}
function stop() {
if (intervalId) {
clearInterval(intervalId);
intervalId = null;
}
isRunning = false;
console.log(`🛑 已停止,累计成功领取 ${successCount} 次`);
updateButton(false);
}
function toggle() { isRunning ? stop() : start(); }
const btn = document.createElement('div');
btn.id = 'quick-claim';
btn.innerText = '▶️ 开始抢领';
btn.style.cssText = `
position: fixed; bottom: 20px; right: 20px; z-index: 999999;
padding: 10px 16px; border-radius: 30px; background: #2ecc71;
color: #fff; font-size: 14px; font-weight: bold; text-align: center;
cursor: pointer; box-shadow: 0 2px 10px rgba(0,0,0,0.2);
font-family: sans-serif; border: none; user-select: none;
`;
btn.onclick = toggle;
document.body.appendChild(btn);
function updateButton(running) {
btn.innerText = running ? '⏹️ 停止抢领' : '▶️ 开始抢领';
btn.style.backgroundColor = running ? '#e74c3c' : '#2ecc71';
}
window.quickClaim = { start, stop, toggle };
console.log('✅ 极速抢领脚本已加载 (80ms/次)');
})();
新增按钮,随启随用。
新增彩蛋。优化逻辑
1.0
(function() {
let intervalId = setInterval(function() {
let receiveButtons = Array.from(document.querySelectorAll('button, a, [role="button"]')).filter(btn => btn.innerText.includes('领取') && !btn.disabled);
if (receiveButtons.length) {
receiveButtons.forEach(btn => {
console.log('点击领取按钮:', btn);
btn.click();
});
} else {
console.log('未找到可领取的按钮');
}
}, 3000);
// 可以提供一个停止函数
window.stopAutoClick = function() { clearInterval(intervalId); console.log('停止自动点击'); };
console.log('已启动自动点击领取,每3秒一次,调用 window.stopAutoClick() 可停止');
})();
最初版本,最稳定
2.0
(async function() {
const CONFIG = {
invalidKeywords: [
'您拨叫的用户正忙', '您拨打的电话正在通话中', '通话移转',
'您拨打的电话已关机', '您拨打的电话暂时无法接通', '您拨打的电话已停机',
'您拨打的电话正忙', '来电提醒', '正在通话中', '已转接', '呼转',
'呼叫', '受限', '阅权', '请勿', '您呼叫的用户', '呼叫转移', '无法接通',
'无法接听请在提示音后录制留言', '请在提示音后录制留言', '提示音后留言',
'录制留言', '语音留言', '留言录音', '提示音',
'还呗来电', '环呗来电', '还贝来电', '还呗提醒您', '您的还呗',
'安逸包来电', '安逸保来电', '安逸宝来电', '安逸包提醒您', '您的安逸包',
'还呗借款', '安逸花来电', '还呗客服',
'爱医宝来电', '爱医保来电', '爱医宝提醒', '爱医保提醒', '您的爱医宝',
'安宝来电', '安宝提醒', '您的安宝', '安宝借款', '安宝客服',
'蚂以置信来电', '难以置信来电', '难以置信提醒', '蚂以置信提醒',
'猎片来电', '猎片提醒', '重录请按', '重录请按井号键', '重新录制请按',
'按井号键重录', '请按井号键', '重录情案', // 新增错别字变体
'安一包', '安一包来电', '安一包提醒',
'星耀来电', '星耀提醒', '星耀借款',
'通话助理', '通话助理来电', '通话助理提醒', '智能通话助理',
'您拨打的用户已停机', '您拨的用户已停机', '用户已停机'
],
englishRatioThreshold: 0.5,
retryCount: 1,
delayBetweenItems: 150,
postFillDelay: 50,
postClickDelay: 50,
smartPunctuation: true,
breakSentenceLength: 25
};
const digitMap = { '零':'0', '一':'1', '二':'2', '三':'3', '四':'4', '五':'5', '六':'6', '七':'7', '八':'8', '九':'9', '两':'2', '幺':'1' };
const unitMap = { '十':10, '百':100, '千':1000, '万':10000, '亿':100000000 };
const arabicToChineseMap = { '0':'零','1':'一','2':'二','3':'三','4':'四','5':'五','6':'六','7':'七','8':'八','9':'九' };
// 保护词库(按长度降序应用)
const protectedWords = [
'一心一意', '三心二意', '朝三暮四', '七上八下', '九牛一毛', '三五成群', '五光十色', '四通八达',
'一石二鸟', '一箭双雕', '一穷二白', '一马当先', '一针见血', '一鼓作气', '一模一样',
'二龙戏珠', '三羊开泰', '四季平安', '五福临门', '六六大顺', '七星高照', '八方来财', '九九归一',
'五月初五', '八月十五', '正月初一', '腊月三十', '大年三十',
'星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日',
'三五人', '七八个', '八九成', '十一二岁', '百八十块', '万儿八千', '一两个', '两三天', '三四次',
'第一千零一条', '第一百一十条', '第二十五条', '第三章', '第五条',
'光绪二十四年', '康熙六十一年', '民国三十八年', '万历十五年',
'两个黄鹂鸣翠柳', '一行白鹭上青天', '二十四桥明月夜', '三千尺', '九万里',
'第一', '第二', '第三', '第四', '第五', '第六', '第七', '第八', '第九', '第十',
'初一', '初二', '初三', '初四', '初五', '初六', '初七', '初八', '初九', '初十',
'老大', '老二', '老三', '老四', '老五', '老六',
'一千零一夜', '一千零一个', '一千零一', '一千零二', '一千零三',
'三百六十五个祝福', '十万个为什么', '五十六个民族',
'一般', '一样', '一直', '万一', '唯一', '统一', '单一', '专一', '同一',
'一方面', '一把手', '一刹那', '一系列', '一窝蜂', '一溜烟',
'二胡', '四书五经', '六神无主', '七窍生烟', '一次性', '一整天', '一辈子',
'一百零八', '五百罗汉', '七十二变', '八十一难', '三十六计', '二十四节气',
'一下', '看一下', '瞧一下', '听一下', '说一声', '问一声',
'点一下', '按一下', '拍一下', '敲一下', '推一下', '拉一下',
'试一下', '尝一下', '闻一下', '摸一下', '碰一下',
'等一下', '等一会儿', '歇一会儿', '玩一下', '聊一下', '讲一下',
'笑一下', '哭一下', '想一下', '考虑一下', '研究一下',
'看一眼', '见一面', '走一趟', '跑一趟', '去一次', '来一次',
'一点', '一点儿', '一点点', '一丁点', '一丁点儿',
'一会', '一会儿', '一下下',
'一些', '一些些', '一系列', '一部分',
'快一点', '慢一点', '好一点', '多一点', '少一点', '大一点', '小一点',
'早一点', '晚一点', '轻一点', '重一点', '高一点', '低一点',
'快点儿', '慢点儿', '好点儿', '多点儿', '少点儿',
'有一点', '有一点儿', '有点', '有点儿',
'一点钟', '两点钟', '三点钟', '四点钟', '五点钟', '六点钟', '七点钟', '八点钟', '九点钟', '十点钟', '十一点钟', '十二点钟',
'一点', '两点', '三点', '四点', '五点', '六点', '七点', '八点', '九点', '十点', '十一点', '十二点',
'一点半', '两点半', '三点半', '四点半', '五点半', '六点半', '七点半', '八点半', '九点半', '十点半', '十一点半', '十二点半',
'一刻', '三刻', '凌晨', '早上', '上午', '中午', '下午', '傍晚', '晚上', '深夜'
];
// 阿拉伯数字转中文(针对数量/排行)
function convertArabicToChineseForQuantifiers(text) {
const pattern = /(\d+)(大行|个|位|只|条|张|本|支|块|次|趟|遍|顿|件|台|辆|部|首|句|家|所|间|座|扇|页|章|节|岁|年|月|天|小时|分钟|秒钟|元|角|分)/g;
return text.replace(pattern, (match, numStr, unit) => {
const num = parseInt(numStr, 10);
if (isNaN(num)) return match;
if (num === 10) return '十' + unit;
if (num === 100) return '一百' + unit;
if (num === 1000) return '一千' + unit;
if (num === 10000) return '一万' + unit;
let chineseNum = '';
const str = num.toString();
for (let ch of str) {
chineseNum += arabicToChineseMap[ch] || ch;
}
return chineseNum + unit;
});
}
// 中文数字整体转阿拉伯(支持小数)
function chineseNumberToIntegerOrDecimal(str) {
let s = str.replace(/两/g, '二');
if (s.includes('点')) {
const parts = s.split('点');
const intVal = parseChineseInteger(parts[0]);
if (intVal === null) return null;
let decimalStr = '';
for (let ch of parts[1]) {
if (digitMap[ch]) decimalStr += digitMap[ch];
else return null;
}
return intVal + '.' + decimalStr;
} else {
return parseChineseInteger(s);
}
}
function parseChineseInteger(str) {
let s = str;
let result = 0, current = 0, section = 0;
for (let i = 0; i < s.length; i++) {
const ch = s[i];
const digit = digitMap[ch] ? parseInt(digitMap[ch]) : null;
if (digit !== null) {
current = digit;
} else if (unitMap[ch]) {
const unit = unitMap[ch];
if (unit >= 10000) {
section = (section + current) * unit;
result += section;
section = 0;
} else {
if (current === 0) current = 1;
section += current * unit;
}
current = 0;
} else {
return null;
}
}
result += section + current;
return result.toString();
}
// 处理“百分之”特殊情况
function convertPercentExpression(text) {
return text.replace(/百分之([零一二三四五六七八九两十百千万亿点]+)/g, (match, numStr) => {
const converted = chineseNumberToIntegerOrDecimal(numStr);
if (converted !== null) return '百分之' + converted;
return match;
});
}
// 处理并列数字
function splitAndConvertChineseNumbers(str) {
if (!/[十百千万亿]/.test(str) && str.length >= 7) {
let result = '';
for (let ch of str) {
result += digitMap[ch] !== undefined ? digitMap[ch] : ch;
}
return result;
}
const units = ['亿', '万', '千', '百', '十'];
for (let unit of units) {
const count = (str.match(new RegExp(unit, 'g')) || []).length;
if (count > 1) {
const parts = str.split(unit);
const results = [];
for (let i = 0; i < parts.length - 1; i++) {
let part = parts[i] + unit;
const converted = chineseNumberToIntegerOrDecimal(part);
if (converted !== null) results.push(converted);
}
const lastPart = parts[parts.length - 1].trim();
if (lastPart !== '') {
const converted = chineseNumberToIntegerOrDecimal(lastPart);
if (converted !== null) results.push(converted);
}
if (results.length > 0) return results.join(',');
}
}
return null;
}
function convertChineseNumbers(text) {
text = convertArabicToChineseForQuantifiers(text);
text = convertPercentExpression(text);
const sortedProtected = [...protectedWords].sort((a, b) => b.length - a.length);
const placeholders = [];
let processedText = text;
sortedProtected.forEach((word, index) => {
const regex = new RegExp(word, 'g');
processedText = processedText.replace(regex, (match) => {
const placeholder = `__PROTECTED_${index}__`;
placeholders.push({ placeholder, original: match });
return placeholder;
});
});
const pattern = /[零一二三四五六七八九两幺十百千万亿点]+/g;
let convertedText = processedText.replace(pattern, (match) => {
const splitResult = splitAndConvertChineseNumbers(match);
if (splitResult !== null) return splitResult;
const numResult = chineseNumberToIntegerOrDecimal(match);
if (numResult !== null) return numResult;
let result = '';
for (let ch of match) {
result += digitMap[ch] !== undefined ? digitMap[ch] : ch;
}
return result;
});
placeholders.forEach(({ placeholder, original }) => {
convertedText = convertedText.replace(new RegExp(placeholder, 'g'), original);
});
return convertedText;
}
// 标点注入:完全不生成感叹号,仅保留问号和句号
function addPunctuation(text) {
if (!text) return text;
text = text.trim();
if (!CONFIG.smartPunctuation) {
const last = text.slice(-1);
if (['。', '?', '.', '?'].includes(last)) return text;
return text + '。';
}
// 若已有终结标点,只保留问号或句号,感叹号一律替换为句号
if (/[。?!.!?]$/.test(text)) {
const lastChar = text.slice(-1);
if (lastChar === '!' || lastChar === '!') {
return text.slice(0, -1) + '。';
}
if (lastChar === '?' || lastChar === '?' || lastChar === '。' || lastChar === '.') {
return text;
}
// 其他情况(如英文问号)统一转中文标点
return text.slice(0, -1) + '。';
}
// 句首叹词加逗号
const interjections = ['哎', '哎呀', '唉', '哦', '嗯', '喂', '嗨', '啊'];
for (let ij of interjections) {
if (text.startsWith(ij) && text.length > ij.length && !/[,,、]/.test(text[ij])) {
text = ij + ',' + text.slice(ij.length).trim();
break;
}
}
// 疑问判断
const questionPronouns = ['谁', '什么', '哪', '怎么', '怎样', '多少', '几', '何', '啥', '呢'];
const yesNoPattern = /有没有|是不是|行不行|去不去|来不来|会不会|要不要|可不可以|能否|是否|在不在|对不对|好不好/;
const hasQuestionPronoun = questionPronouns.some(p => text.includes(p));
const hasYesNo = yesNoPattern.test(text);
const hasMa = text.includes('吗');
if (hasMa || hasQuestionPronoun || hasYesNo) {
if (hasMa) {
const maIndex = text.lastIndexOf('吗');
if (text[maIndex + 1] !== '?' && text[maIndex + 1] !== '?') {
text = text.slice(0, maIndex + 1) + '?' + text.slice(maIndex + 1);
}
text = text.replace(/([?。!])\s*([?。!])/g, '');
if (!/[。?!]$/.test(text)) text += '。';
return text;
} else {
const modalParticles = ['啊', '呀', '呢', '吧', '哦', '哟', '啦', '喽', '嘿', '哈', '哇'];
let lastModalIndex = -1;
for (let i = text.length - 1; i >= Math.floor(text.length / 2); i--) {
if (modalParticles.includes(text[i])) { lastModalIndex = i; break; }
}
if (lastModalIndex === -1) {
for (let i = text.length - 1; i >= 0; i--) {
if (modalParticles.includes(text[i])) { lastModalIndex = i; break; }
}
}
let result = text;
if (lastModalIndex !== -1) {
result = text.slice(0, lastModalIndex + 1) + '?' + text.slice(lastModalIndex + 1);
} else {
result = text + '?';
}
result = result.replace(/([?。!])\s*([?。!])/g, '');
if (!/[。?!]$/.test(result)) result += '。';
return result;
}
}
// 默认加句号
return text + '。';
}
// 有效性判断(包含纯问候语过滤)
function isValidText(originalText) {
const pureGreetings = /^(你好|您好|喂|嗨|在吗|哈喽)[!!。??]*$/;
if (pureGreetings.test(originalText.trim())) return false;
if (CONFIG.invalidKeywords.some(kw => originalText.includes(kw))) return false;
const letters = originalText.match(/[a-zA-Z]/g) || [];
if (letters.length / originalText.length > CONFIG.englishRatioThreshold) return false;
return true;
}
function setTextareaValue(textarea, value) {
const nativeSetter = Object.getOwnPropertyDescriptor(window.HTMLTextAreaElement.prototype, 'value')?.set;
if (nativeSetter) nativeSetter.call(textarea, value);
else textarea.value = value;
textarea.dispatchEvent(new Event('input', { bubbles: true }));
textarea.dispatchEvent(new Event('change', { bubbles: true }));
textarea.dispatchEvent(new Event('blur', { bubbles: true }));
}
async function processAll() {
const items = Array.from(document.querySelectorAll('.labelRender-item'));
console.log(`找到 ${items.length} 个条目`);
for (let i = 0; i < items.length; i++) {
const item = items[i];
let textarea = null, radioGroup = null;
const wraps = item.querySelectorAll('.labelRender-item-answer-wrap');
for (let wrap of wraps) {
const titleEl = wrap.querySelector('.labelRender-item-answer-title');
if (!titleEl) continue;
const titleText = titleEl.innerText.trim();
if (titleText.includes('转写文本')) textarea = wrap.querySelector('textarea.ant-v5-input');
else if (titleText.includes('是否有效')) radioGroup = wrap;
}
if (!textarea || !radioGroup) {
console.warn(`条目 ${i+1} 缺少控件,跳过`);
continue;
}
if (textarea.value.trim() && radioGroup.querySelector('input[type="radio"]:checked')) {
console.log(`条目 ${i+1} 已处理,跳过`);
continue;
}
const originalDiv = item.querySelector('.dt-text-container > div');
const original = originalDiv ? originalDiv.innerText.trim() : '';
if (!original) {
console.warn(`条目 ${i+1} 无原始文本,跳过`);
continue;
}
const effective = isValidText(original);
let targetText = '';
if (effective) {
const converted = convertChineseNumbers(original);
targetText = addPunctuation(converted);
}
console.log(`\n--- 条目 ${i+1} ---`);
console.log(`原始: ${original}`);
console.log(`有效: ${effective}`);
if (effective) console.log(`转写: ${targetText}`);
let success = false;
for (let retry = 0; retry < CONFIG.retryCount && !success; retry++) {
if (effective) {
setTextareaValue(textarea, targetText);
await new Promise(r => setTimeout(r, CONFIG.postFillDelay));
if (textarea.value !== targetText) continue;
} else {
setTextareaValue(textarea, '');
await new Promise(r => setTimeout(r, CONFIG.postFillDelay));
}
const labels = radioGroup.querySelectorAll('label.ant-v5-radio-wrapper');
let clicked = false;
for (let label of labels) {
const labelSpan = label.querySelector('.ant-v5-radio-label');
if (labelSpan && labelSpan.innerText.trim() === (effective ? '有效' : '无效')) {
if (!label.classList.contains('ant-v5-radio-wrapper-checked')) {
label.click();
await new Promise(r => setTimeout(r, CONFIG.postClickDelay));
}
clicked = true;
break;
}
}
if (!clicked) {
const radio = Array.from(radioGroup.querySelectorAll('input[type="radio"]')).find(r => r.value === (effective ? '有效' : '无效'));
if (radio && !radio.checked) {
radio.checked = true;
radio.dispatchEvent(new Event('change', { bubbles: true }));
radio.dispatchEvent(new Event('click', { bubbles: true }));
await new Promise(r => setTimeout(r, CONFIG.postClickDelay));
}
}
if (effective && textarea.value !== targetText) {
setTextareaValue(textarea, targetText);
} else {
success = true;
}
}
if (!success) console.error(`条目 ${i+1} 处理失败`);
textarea.scrollIntoView({ behavior: 'smooth', block: 'center' });
await new Promise(r => setTimeout(r, CONFIG.delayBetweenItems));
}
console.log('所有条目处理完成!');
}
processAll().catch(console.error);
})();
存在识别不准确的bug,单位计数转化时概率会出现问题。
功能:自动勾选是否有效,自动将文本填写至文本框内,并且加上一定的标点符号(不稳定)
1.0呢?那压根用不了!
© 版权声明
THE END














暂无评论内容