import fonts.fontAwesome; import win.ui; /*DSG{{*/ mainForm = win.form(text="lmarena 前沿大模型快速切换工具";right=1040;bottom=642;bgcolor=0xFFFFFF;border="none") mainForm.add( caption={cls="bkplus";text="AI";left=35;top=12;right=74;bottom=31;color=0xF0CAA6;dl=1;dt=1;font=LOGFONT(h=-16);z=5}; lbTip={cls="static";text='\u2190 清除记录并修复报错';left=739;top=8;right=892;bottom=35;center=1;color=0xFFFFFF;transparent=1;z=11}; logo={cls="bkplus";text='\uF00B';left=6;top=9;right=35;bottom=34;color=0xF0CAA6;dl=1;dt=1;font=LOGFONT(h=-18;name='FontAwesome');z=4}; nav1={cls="plus";text="Gemini";left=93;top=5;right=197;bottom=40;align="left";color=0xFFFFFF;dl=1;dt=1;font=LOGFONT(h=-16);iconStyle={align="left";font=LOGFONT(h=-19;name='FontAwesome');padding={left=12;top=4}};iconText='\uF007';notify=1;paddingLeft=1;paddingRight=1;paddingTop=3;textPadding={left=39;bottom=1};x=0.5;y=0.2;z=3}; nav2={cls="plus";text="Claude Sonnet";left=199;top=5;right=356;bottom=40;align="left";color=0xFFFFFF;dl=1;dt=1;font=LOGFONT(h=-16);iconStyle={align="left";font=LOGFONT(h=-19;name='FontAwesome');padding={left=12;top=4}};iconText='\uF121';notify=1;paddingLeft=1;paddingRight=1;paddingTop=3;textPadding={left=39;bottom=1};x=0.5;y=0.2;z=8}; nav3={cls="plus";text="Claude Opus";left=359;top=5;right=504;bottom=40;align="left";color=0xFFFFFF;dl=1;dt=1;font=LOGFONT(h=-16);iconStyle={align="left";font=LOGFONT(h=-19;name='FontAwesome');padding={left=12;top=4}};iconText='\uF02D';notify=1;paddingLeft=1;paddingRight=1;paddingTop=3;textPadding={left=39;bottom=1};x=0.5;y=0.2;z=6}; nav4={cls="plus";text="GPT-5";left=506;top=5;right=608;bottom=40;align="left";color=0xFFFFFF;dl=1;dt=1;font=LOGFONT(h=-16);iconStyle={align="left";font=LOGFONT(h=-19;name='FontAwesome');padding={left=12;top=4}};iconText='\uF0E6';notify=1;paddingLeft=1;paddingRight=1;paddingTop=3;textPadding={left=39;bottom=1};x=0.5;y=0.2;z=7}; nav5={cls="plus";text="O3";left=610;top=5;right=687;bottom=40;align="left";color=0xFFFFFF;dl=1;dt=1;font=LOGFONT(h=-16);iconStyle={align="left";font=LOGFONT(h=-19;name='FontAwesome');padding={left=12;top=4}};iconText='\uF1E4';notify=1;paddingLeft=1;paddingRight=1;paddingTop=3;textPadding={left=39;bottom=1};x=0.5;y=0.2;z=10}; navReset={cls="plus";left=687;top=5;right=732;bottom=40;align="left";color=0xFFFFFF;dl=1;dt=1;font=LOGFONT(h=-16);iconStyle={font=LOGFONT(h=-19;name='FontAwesome')};iconText='\uF1F8';notify=1;paddingLeft=1;paddingRight=1;paddingTop=3;textPadding={left=39;bottom=1};x=0.5;y=0.2;z=9}; tabPanel={cls="static";left=0;top=40;right=1040;bottom=643;bgcolor=0xFFFFFF;db=1;dl=1;dr=1;dt=1;z=1}; titleBar={cls="bkplus";left=0;top=0;right=1041;bottom=41;bgcolor=0xE48900;dl=1;dr=1;dt=1;z=2} ) /*}}*/ import win.ui.tabs; var tabs = win.ui.tabs( mainForm.nav1,mainForm.nav2,mainForm.nav3,mainForm.nav4,mainForm.nav5); mainForm.show(); import web.view; var wb = web.view(mainForm.tabPanel,{ language = "zh-CN"; //中文语言 startArguments = { //proxyServer = "SOCKS5://127.0.0.1:1081";//指定代理服务器 }; }) //向网页导出 aardio 本地函数 wb.external = { //在 JavaScript 中通过 window.aardio 访问 wb.external sendEnter = function(){ import key key.press("BACK") key.press("ENTER") } getSystemPrompt = function(){ return string.load("~\doc\guide\ide\system-prompt.md") +'\n\n------\n\n' + string.load("~\doc\guide\language\syntax-quick-ref.md") +'\n\n------\n\n' } } //订阅 CDP 事件,拦截并自动关闭网页对话框。 wb.cdp("Page.enable"); wb.cdpSubscribe("Page.javascriptDialogOpening",function(dlg){ return function(){ wb.cdp("Page.handleJavaScriptDialog",{accept=true}) if(tabs.selText=="lmarena"){ wb.doScript(`document.documentElement.scrollTop = document.documentElement.scrollHeight;`); } } }) //文档打开后回调此函数 wb.onDocumentInit = function(url){ //恢复并启用所有选项 tabs.disabledText = null; } //自动选择 模型 ID var selectModel = function(model){ wb.go("https://lmarena.ai/?mode=direct"); //跨页面等待指定节点 wb.waitEle2(`button[role="combobox"][data-sentry-source-file="model-dropdown.tsx"]`); thread.delay(1000) //稍等 1 秒 //找到节点并模拟点击之 wb.waitEle(`button[role="combobox"][data-sentry-source-file="model-dropdown.tsx"]`,` this.click()`) //让网页获得输入焦点 wb.focus() //获取弹出的 React 下拉框,模拟输入并改变 React 状态值。 wb.waitEle(`input[placeholder="Search models"]`,` var previousValue = this.value; this.value = "`+model+`"; if(this._valueTracker)this._valueTracker.setValue(previousValue); //发送事件 this.dispatchEvent(new Event('change', { bubbles: true })); //调用本地代码发送回车 aardio.sendEnter();`); thread.delay(1000) wb.waitEle(`textarea[placeholder="Ask anything…"]`,` this.focus();`); tabs.disabledText = null; } mainForm.nav1.oncommand = function(){ selectModel("gemini-2.5-pro"); } mainForm.nav2.oncommand = function(){ selectModel("claude-sonnet-4-20250514"); } mainForm.nav3.oncommand = function(){ selectModel("claude-opus-4-1-20250805-thinking-16k"); } mainForm.nav4.oncommand = function(id,event){ selectModel("gpt-5-chat"); } mainForm.nav5.oncommand = function(id,event){ selectModel("o3-2025-04-16"); } var tip = function(text){ mainForm.lbTip.hide = false; mainForm.lbTip.text = text; mainForm.setTimeout( function(){ mainForm.lbTip.hide = true; mainForm.lbTip.text = "← 清除记录并修复报错" },5000); } //切换选项卡回调此函数 tabs.onSelchange = function(idx,tab,form){ //当前选项切换到禁用状态并显示沙漏动画(fontAwesome 字体),在此同时其他选项卡也会禁止响应事件。 tabs.disabledText = {'\uF254';'\uF251';'\uF252';'\uF253';'\uF250'} tip("← 会话报错点这里清除记录"); //因为 tab 已被禁用,默认不会自动调用 tab.oncommand tab.oncommand(); } mainForm.navReset.skin({ foreground={ active=0xFFFFFFFF; default=0x00FFFFFF; hover=0x38FFFFFF }; iconColor={ default=0xFFFFFFFF; active=0xFFCCCCCC; }; }) mainForm.navReset.oncommand = function(){ mainForm.navReset.disabledText = ['\uF254','\uF251','\uF252','\uF253','\uF250'] /* 清空网站数据, 如果对话报错,清空网站数据以后可以解决。 同时会清空对话记录(网站将对话记录保存在本地)。 */ wb.cdp("Storage.clearDataForOrigin", { "origin": "https://lmarena.ai", "storageTypes": "all" }); thread.delay(2000); mainForm.navReset.disabledText = null; tip("请切换一下选项卡!") } //设置选项卡样式 tabs.skin({ foreground={ active=0xFFFFFFFF; default=0x00FFFFFF; hover=0x38FFFFFF }; color={ default=0xFFFFFFFF; }; checked={ foreground={default=0xFFFFFFFF;}; color={default=0xFF42A875;}; } }) //为无边框窗口添加标题栏按钮、可拖动缩放的窗体边框等,应当放在 mainForm.show() 之前。 import win.ui.simpleWindow; win.ui.simpleWindow( mainForm ); tabs.selIndex = 1; return win.loopMessage();