// ==UserScript== // @name 必应Rewards热搜自动输入任务 // @version 2.1.0 // @description 自动抓取抖音/微博/百度/头条热搜词,每次自动填入Bing搜索框并回车(自动提交),首次启动弹窗全部热词。每次5-10秒随机延迟。热搜词只在第一次启动时获取。 // @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'); /** * 获取多平台热搜词(只在第一次菜单启动时执行) * @returns {Promise} */ async function fetchHotWords() { for (let i = 0; i < keywords_source.length; i++) { const source = keywords_source[i]; let url; if (appkey) { url = Hot_words_apis + source + "?format=json&appkey=" + appkey; } else { url = 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; } // 自动填入搜索框并回车 function fillBingInputAndEnter(words, cnt) { // 主输入框id为sb_form_q,或class为b_searchbox let input = document.getElementById('sb_form_q') || document.querySelector('.b_searchbox'); if (input) { input.value = words[cnt % words.length]; input.focus(); input.select(); // 创建并派发回车事件(实际触发提交) let e = new KeyboardEvent('keydown', { bubbles: true, cancelable: true, key: 'Enter', code: 'Enter', which: 13, keyCode: 13 }); input.dispatchEvent(e); } } // 自动滚动到底部 function smoothScrollToBottom() { document.documentElement.scrollIntoView({ behavior: 'smooth', block: 'end' }); } // 主体自动输入+回车逻辑 (function () { 'use strict'; if (GM_getValue('Cnt') == null) GM_setValue('Cnt', max_rewards + 10); let cnt = GM_getValue('Cnt'); let hotSearchList = GM_getValue('HotSearchList'); if (cnt < max_rewards && hotSearchList) { let words = JSON.parse(hotSearchList); startFillInput(cnt, words); } function startFillInput(cnt, words) { let tt = document.getElementsByTagName("title")[0]; if (tt) tt.innerHTML = "[" + cnt + " / " + max_rewards + "] " + tt.innerHTML; 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); } })();