⚠️ 仅修改请求类型,不会改变 grok 的原始额度。当额度耗尽时,请求将直接失败。请谨慎使用本脚本 - 仅在你只使用 grok 的 deeper research 功能时启用。建议配合 grok 会员的更高额度食用。
将下面的代码复制粘贴到油猴之类的脚本管理器就可以使用了
// ==UserScript==
// @name 逮虾户!Grok深度挖掘机 🚜💨
// @namespace http://replaceme.org/
// @version 1.1.1
// @description Modifies Grok new chat AND follow-up requests (new & responses endpoints) to set deepsearchPreset = 'deeper'
// @author You & Gemini
// @match *://grok.com/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=grok.com
// @license Unlicense
// @grant unsafeWindow
// @grant GM_log
// @run-at document-start
// ==/UserScript==
(function() {
'use strict';
// 正则表达式,匹配以下两种路径:
// 1. /rest/app-chat/conversations/new
// 2. /rest/app-chat/conversations/{任意非斜杠字符序列}/responses
const TARGET_URL_REGEX = /^\/rest\/app-chat\/conversations\/(new|[^/]+\/responses)$/i;
const LOG_PREFIX = '[Grok Modify v1.1.1]';
function log(message) {
// GM_log(message); // Optional: Use GM_log for Tampermonkey console output
console.log(`${LOG_PREFIX} ${message}`);
}
log('Script starting...');
// --- 获取原始 fetch 函数 ---
let originalFetch;
try {
originalFetch = unsafeWindow.fetch;
if (typeof originalFetch !== 'function') {
log('Error: unsafeWindow.fetch is not accessible or not a function. Script stopped.');
return;
}
log('Original fetch function captured.');
} catch (e) {
log(`Error accessing unsafeWindow.fetch: ${e}. Script stopped.`);
return;
}
// --- 覆盖 fetch 函数 ---
try {
unsafeWindow.fetch = function(url, options, ...rest) {
// 保存原始参数,以便在出错时能调用原始请求
const originalArguments = [url, options, ...rest];
let requestUrlStr = '';
let isTargetRequest = false;
let targetPath = ''; // 用于存储 URL 的路径部分
try {
// 稳健地确定请求 URL 字符串
if (typeof url === 'string') {
requestUrlStr = url;
} else if (url instanceof Request) {
requestUrlStr = url.url;
} else {
// 无法确定 URL,直接调用原始 fetch
log('Warning: Could not determine request URL. Skipping modification check.');
return originalFetch.apply(unsafeWindow, originalArguments);
}
// 使用当前页面的 origin 作为基础来处理相对 URL
const baseUrl = unsafeWindow.location.origin;
const urlObject = new URL(requestUrlStr, baseUrl);
targetPath = urlObject.pathname; // 获取路径名,例如 "/rest/app-chat/conversations/new"
// 检查是否是目标 API 路径之一,并且方法是 POST
isTargetRequest = TARGET_URL_REGEX.test(targetPath) && options && options.method && options.method.toUpperCase() === 'POST';
} catch (urlError) {
log(`Error processing URL (${requestUrlStr}): ${urlError}. Skipping modification check for this call.`);
isTargetRequest = false; // 确保 URL 解析失败时不继续处理
}
// 如果是目标请求,则尝试修改
if (isTargetRequest) {
log(`Intercepted target request path: ${targetPath}`);
try {
// 检查 body 是否存在且为字符串 (基于之前的测试)
if (options.body && typeof options.body === 'string') {
log('Attempting to parse and modify JSON body...');
let parsedBody = JSON.parse(options.body);
log('Original body parsed.');
// --- !!! 核心修改 !!! ---
const oldValue = parsedBody.deepsearchPreset; // 记录旧值(可能是 undefined)
parsedBody.deepsearchPreset = "deeper";
// ------------------------
log(`Set 'deepsearchPreset' to "deeper" ${oldValue !== undefined ? `(was: ${oldValue})` : '(added)'}.`);
// 将修改后的对象重新序列化为 JSON 字符串
options.body = JSON.stringify(parsedBody);
log('Body successfully modified and re-stringified.');
} else {
// 虽然测试表明 body 是字符串,但以防万一
log('Warning: Target request body not found or not a string. No modification applied.');
}
} catch (e) {
// 如果在修改过程中发生错误
log(`Error during body modification for ${targetPath}: ${e}.`);
log('Sending the request WITHOUT modification due to error.');
// 出错时,调用原始 fetch 并使用【原始】参数
return originalFetch.apply(unsafeWindow, originalArguments);
}
}
// 调用原始 fetch 函数
// 注意:这里的 'arguments' 是传递给 *这个包装函数* 的参数,
// 其中 'options' 对象可能已经被修改过了。
return originalFetch.apply(unsafeWindow, arguments);
};
log('Fetch wrapper installed successfully. Ready to modify requests for new and responses endpoints.');
} catch (e) {
log(`Fatal error installing fetch wrapper: ${e}. Script failed.`);
// 如果安装包装器时发生严重错误,尝试恢复原始 fetch
if (originalFetch) unsafeWindow.fetch = originalFetch;
}
})();