Qwen Chat自动选择模型

Automatically select the model for Qwen Chat

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Qwen Chat自动选择模型
// @namespace    http://tampermonkey.net/
// @version      1.0.0
// @description  Automatically select the model for Qwen Chat
// @author       tgxhx
// @license      MIT
// @match        https://chat.qwen.ai/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=qwen.ai
// @grant        GM_getValue
// @grant        GM_setValue
// @grant        GM_registerMenuCommand
// @run-at       document-idle
// ==/UserScript==

(function() {
    'use strict';

    // 从配置中获取modelName
    let modelName = GM_getValue('modelName') || 'QwQ-32B';

    // 注册配置菜单
    GM_registerMenuCommand('设置目标模型名称', () => {
        const newModelName = prompt('请输入要自动选择的模型名称(默认:QwQ-32B):', modelName);
        if (newModelName !== null) {
            modelName = newModelName;
            GM_setValue('modelName', newModelName);
            console.log(`[配置更新] 模型名称已更新为:${newModelName}`);
        }
    });

    function log(message) {
        console.log(`[${new Date().toISOString()}] ${message}`);
    }

    let intervalId; // 全局变量保存定时器ID

    // 主逻辑函数:每秒执行一次
    function mainLoop() {
        // 步骤1:查找元素A
        const elementA = document.querySelector('[aria-label="选择一个模型"][data-state] > div > div');

        if (elementA) {
            const currentText = elementA.textContent.trim();
            log(`元素A当前文本:${currentText}`);

            if (currentText === modelName) {
                log('元素A文本正确,清除定时器');
                clearInterval(intervalId); // 检测到正确时停止轮询
            } else {
                log('元素A文本不匹配,开始点击');
                elementA.click();

                // 步骤2:延迟200ms后查找菜单和目标元素B
                setTimeout(() => {
                    const menuContainer = document.querySelector('[role="menu"]');
                    if (menuContainer) {
                        log('找到菜单容器,开始查找目标元素B');

                        // 遍历菜单容器查找文本为"QwQ-32B"的元素
                        let targetElement = null;
                        menuContainer.querySelectorAll('*').forEach(el => {
                            if (modelName && el.textContent.trim() === modelName) {
                                targetElement = el;
                                return; // 找到后终止循环
                            }
                        });

                        if (targetElement) {
                            log('找到目标元素B,点击');
                            targetElement.click();
                        } else {
                            log('未找到目标元素B');
                        }
                    } else {
                        log('未找到菜单容器');
                    }
                }, 200);
            }
        } else {
            log('未找到元素A');
        }
    }

    setTimeout(() => {
        const newChatButton = document.getElementById('sidebar-new-chat-button');

        if (newChatButton) {
            log('找到"新建对话"按钮,开始监听点击事件');

            newChatButton.addEventListener('click', () => {
                log('检测到新建对话按钮点击,重新启动定时器');
                // 重新开启定时器
                intervalId = setInterval(mainLoop, 300);
                log('定时器已重新启动');
            });
        } else {
            log('未找到"新建对话"按钮');
        }
    }, 3000)

    // 初始化定时器(页面加载时先启动)
    log('页面加载完成,启动定时器');
    intervalId = setInterval(mainLoop, 500);
})();