// ==UserScript== // @name 必应Rewards热搜自动输入任务 // @version 2.2.0 // @description 自动抓取抖音/微博/百度/头条热搜词,每次自动填入Bing搜索框并回车(自动提交),首次启动弹窗全部热词。每次5-10秒随机延迟。热搜词只在第一次启动时获取,支持Bing页面异步渲染。 // @author Sentaku1129 // @match https://www.bing.com/* // @match https://cn.bing.com/* // @license GNU GPLv3 // @icon https://www.bing.com/favicon.ico // @run-at document-end // @grant GM_registerMenuCommand // @grant GM_setValue // @grant GM_getValue // @namespace https://greasyfork.org/users/1029902 // @downloadURL none // ==/UserScript== var max_rewards = 30; // 每日最大自动输入次数 const appkey = ""; // 如有API key请填写 const Hot_words_apis = "https://api.gmya.net/Api/"; const keywords_source = ['BaiduHot', 'TouTiaoHot', 'DouYinHot', 'WeiBoHot']; const default_search_words = [ "盛年不重来,一日难再晨", "千里之行,始于足下", "少年易学老难成,一寸光阴不可轻", "敏而好学,不耻下问", "海内存知已,天涯若比邻", "三人行,必有我师焉", "莫愁前路无知已,天下谁人不识君", "人生贵相知,何用金与钱", "天生我材必有用", "海纳百川有容乃大;壁立千仞无欲则刚", "穷则独善其身,达则兼济天下", "读书破万卷,下笔如有神", "学而不思则罔,思而不学则殆", "一年之计在于春,一日之计在于晨", "莫等闲,白了少年头,空悲切", "少壮不努力,老大徒伤悲", "一寸光阴一寸金,寸金难买寸光阴", "近朱者赤,近墨者黑", "吾生也有涯,而知也无涯", "纸上得来终觉浅,绝知此事要躬行", "学无止境", "己所不欲,勿施于人", "天将降大任于斯人也", "鞠躬尽瘁,死而后已", "书到用时方恨少", "天下兴亡,匹夫有责", "人无远虑,必有近忧", "为中华之崛起而读书", "一日无书,百事荒废", "岂能尽如人意,但求无愧我心" ]; // 注册菜单:开始 GM_registerMenuCommand('开始', function () { GM_setValue('Cnt', 0); GM_setValue('HotSearchList', null); fetchHotWords().then(words => { GM_setValue('HotSearchList', JSON.stringify(words)); location.href = "https://www.bing.com/?br_msg=Please-Wait"; }); }, 'o'); // 注册菜单:停止 GM_registerMenuCommand('停止', function () { GM_setValue('Cnt', max_rewards + 10); alert("已停止自动输入!"); location.reload(); }, 'o'); // 获取多平台热搜词 async function fetchHotWords() { for (let i = 0; i < keywords_source.length; i++) { const source = keywords_source[i]; let url = appkey ? Hot_words_apis + source + "?format=json&appkey=" + appkey : Hot_words_apis + source; try { const response = await fetch(url); if (!response.ok) throw new Error('HTTP error! status: ' + response.status); const data = await response.json(); if (data.data && data.data.length) { const titles = data.data.map(item => item.title); // alert("获取到的热搜词:\n" + titles.join('\n')); return titles.slice(0, max_rewards); } } catch (error) { console.error('热搜词来源请求失败:', error); } } alert("全部热搜API失效,使用默认搜索词。"); return default_search_words.slice(0, max_rewards); } // 字符扰动,防检测 function AutoStrTrans(st) { let yStr = st; let rStr = "试验"; let zStr = ""; let prePo = 0; for (let i = 0; i < yStr.length;) { let step = parseInt(Math.random() * 6) + 1; if (i > 0) { zStr = zStr + yStr.substr(prePo, i - prePo) + rStr; prePo = i; } i = i + step; } if (prePo < yStr.length) { zStr = zStr + yStr.substr(prePo, yStr.length - prePo) } return zStr; } // 等待title出现,最大5秒,返回最终标题 function waitForTitle(defaultTitle = "必应搜索", maxWaitMs = 5000, intervalMs = 50) { return new Promise((resolve) => { let waited = 0; const timer = setInterval(() => { try { if (typeof document !== "undefined" && document.title && document.title.trim()) { clearInterval(timer); resolve(document.title); } else if ((waited += intervalMs) >= maxWaitMs) { clearInterval(timer); document.title = defaultTitle; resolve(document.title); } } catch (e) { clearInterval(timer); document.title = defaultTitle; resolve(document.title); } }, intervalMs); }); } // 自动填入搜索框并回车 function fillBingInputAndEnter(words, cnt) { let input = document.getElementById('sb_form_q') || document.querySelector('.b_searchbox'); if (!input) return; input.value = words[cnt % words.length]; input.focus(); input.select(); input.dispatchEvent(new Event('input', {bubbles: true})); // 优先模拟回车 let enterDown = new KeyboardEvent('keydown', {bubbles: true, cancelable: true, key: 'Enter', code: 'Enter', which: 13, keyCode: 13}); let enterUp = new KeyboardEvent('keyup', {bubbles: true, cancelable: true, key: 'Enter', code: 'Enter', which: 13, keyCode: 13}); input.dispatchEvent(enterDown); input.dispatchEvent(enterUp); // 检查2秒后页面是否跳转,没有则用按钮点击兜底 setTimeout(() => { let btn = document.getElementById('sb_form_go') || document.querySelector('.b_searchboxForm input[type="submit"]'); if (btn) btn.click(); else { let form = input.form; if (form) form.submit(); } }, 2000); } // 自动滚动到底部 function smoothScrollToBottom() { document.documentElement.scrollIntoView({ behavior: 'smooth', block: 'end' }); } // 主体自动输入+回车逻辑 (function () { 'use strict'; if (GM_getValue('Cnt') == null){ alert("失败"); GM_setValue('Cnt', max_rewards + 10); } let cnt = GM_getValue('Cnt'); let hotSearchList = GM_getValue('HotSearchList'); if (cnt < max_rewards && hotSearchList) { let words = []; try { words = JSON.parse(hotSearchList); } catch (e) { words = default_search_words.slice(0, max_rewards); } setTimeout(() => startFillInput(cnt, words), 1000); } function startFillInput(cnt, words) { waitForTitle().then(originalTitle => { // 只保留原始标题内容,去除旧前缀 originalTitle = originalTitle.replace(/^\[\d+ \/ \d+\]\s*/, ''); document.title = `[${cnt} / ${max_rewards}] ${originalTitle}`; smoothScrollToBottom(); // 5-10秒随机延迟 let delay = Math.floor(Math.random() * 5000) + 5000; setTimeout(function () { GM_setValue('Cnt', cnt + 1); let nowtxt = words[cnt % words.length]; nowtxt = AutoStrTrans(nowtxt); fillBingInputAndEnter([nowtxt], 0); }, delay); }); } })();