自动操作 lmarena 免费的 Claude 大模型 - React 前端自动化控制实例
myzbx 2025-08-31 06:00 7 浏览
大模型竞技场 lmarena.ai 最近发布了基于 React 的新版本、用户体验更友好了。lmarena 上几乎所有的前沿商业大模型都可以免费使用。有些大模型自己的网站一会是不让你用一会是封你号一会是你不在服务区,相比起来 lmarena 上几乎没有什么太大的限制。
现在 React 开发的网站越来越多,今天我们就将 lmarena.ai 作为一个实例,演示一下如何自动化操作这样的网页。
我们需要实现:
- 自动打开 lmarena.ai 并自动切换到对话界面。
- 自动输入指定的大模型名称,并自动切换到该模型。
- 自动输入一个或多个事先准备好的提示词。如果有好几个几万字的提示词,手动输入估计会很累的。
- 最后自动滚动到底部等待提问。
需要注意的,类似 Reat 这样的现代化前端框架,有着复杂的数据同步机制。用 JS 代码
document.querySelector(`input`).value = "输入值"
这样直接修改值是没有反应的,当然,要解决这个问题也非常简单。下面请一步步跟我学,要不了几分钟你就能学会了。
首先我们讲一下如何判断网站是不是用 React 开发的,如果你不想安装 React 的扩展,一个简单的方法是打开浏览器的 devtools ,在 console 里里输入 document.body._ 前缀就可以看到 React 特有的一些属性:
document.body.__reactFiber$ ......
如图:
如果是 React 控制的输入组件,还会有 _valueTracker 这个属性,要想改变输入框的值关键就是这个 _valueTracker 了。
为了快速创建立即可用的程序,减少部署与开发的过程,我们使用快速开发桌面应用的 aardio ,新建一个空白窗口程序,输入下面的代码:
import win.ui;
/*DSG{{*/
var winform = win.form(text="lmarena.ai")
/*}}*/
import web.view;
var wb = web.view(winform);
winform.show(3);
//打开网页
wb.go("https://lmarena.ai/?mode=direct");
win.loopMessage();
一个简单的程序就写好了,按 F5 可以就可以运行,我们使用操作系统自带的强大 WebView2 控件打开了 lmarena.ai ,并通过 URL 参数切换到了 AI 对话页面。
React 这种 JS 框架会使用 JS 动态创建页面内容,所以用传统的方法去等待页面加载完成了, React 组件可能还未创建。不过在 aardio 里做这种事很容易,我们在打开网页的 wb.go() 调用后面添加代码如下:
wb.go("https://lmarena.ai/?mode=direct");
//跨页面等待指定节点
wb.waitEle2(`button[role="combobox"][data-sentry-source-file="select-model.tsx"]`);
//稍等 1 秒
thread.delay(1000)
//找到节点并模拟点击之
wb.waitEle(`button[role="combobox"][data-sentry-source-file="select-model.tsx"]`,`
this.click()`)
我们首先等待网页创建好大模型下拉列表,要点:
wb.waitEle2 与 wb.waitEle 的第一个参数都是用于选择 HTML 元素的 CSS 选择器,打不到他就一直等,找到了就回调第 2 个参数里指定的 JS 代码或者 aardio 回调函数。回调 JS 时 this 对象就表示找到的 HTML 元素。
wb.waitEle2 可以跨 URL 等待,而 wb.waitEle 仅在当前 URL 下面等待。因为网页在打开前可能会跳转,所以第一次用 wb.waitEle2 ,后面就不需要了。
执行上面的代码以后,程序自动打开了网页,并点击展开了模型列表,只有展开模型列表才会出现输入框组件,不然代码是找不到输入框的。
下面继续添加代码自动选择 claude 4 这个模型:
//让网页获得输入焦点
wb.focus()
//获取弹出的 React 下拉框,模拟输入并改变 React 状态值。
wb.waitEle(`input[placeholder="Search models"]`,`
var previousValue = this.value;
this.value = "claude-sonnet-4-20250514";
if(this._valueTracker)this._valueTracker.setValue(previousValue);
//发送事件
this.dispatchEvent(new Event('change', { bubbles: true }));
//这个一直不关的提醒还是删掉吧
document.querySelector('div[data-sentry-source-file="nag-bar.tsx"]').outerHTML = "";
//调用本地代码发送回车
aardio.sendEnter();`);
我们可以看到上面的代码通过 _valueTracker 成功改变了 React 组件的值。
但是最后确认输入这一步,我用 aardio 直接给浏览器控件添加了一个本地函数如下:
wb.external = {
sendEnter = function(){
import key
key.press("BACK")
key.press("ENTER")
}
}
用 aardio 干活要简单得多,不用去研究 React 的复杂机制了。
后续我们希望自动加载一些文件并填入 AI 提示词,原理跟上面一样,自动输入提示词的 aardio 代码如下:
wb.waitEle(`textarea[placeholder="Ask anything…"]`,`
var previousValue = this.value;
aardio.getSystemPrompt().then(
prompt => {
this.value = prompt;
if(this._valueTracker)this._valueTracker.setValue(previousValue);
this.dispatchEvent(new Event('click', { bubbles: true }));
this.dispatchEvent(new Event('mouseup', { bubbles: true }));
this.dispatchEvent(new Event('focus', { bubbles: true }));
this.dispatchEvent(new Event('input', { bubbles: true }));
this.dispatchEvent(new Event('change', { bubbles: true }));
this.dispatchEvent(new Event('click', { bubbles: true }));
this.dispatchEvent(new Event('mouseup', { bubbles: true }));
this.dispatchEvent(new Event('blur', { bubbles: true }));
this.scrollTop = this.scrollHeight;
}
) `);
这里我又使用 aardio 为浏览器添加了一个本地函数 getSystemPrompt 用于加载本地文件到网页。
测试了一下,用这个小工具再去问 Claude 4 关于 aardio 的编程问题,技能立即暴升几十倍。你还可以再加上自动 AI 搜索(就几句代码的事,请查看 aardio 文档),那就更好用了。
不过要效果最好的还是使用 aardio 提供的专用接口,完整接入 aardio 知识库以后哪怕是一般的大模型 aardio 编程技能都会提升百倍。一个好的知识库是非常重要的。
不过要效果最好的还是使用 aardio 提供的专用接口,完整接入 aardio 知识库以后哪怕是一般的大模型 aardio 编程技能都会提升百倍。一个好的知识库是非常重要的。其实什么 AI 幻觉就是因为他缺乏相关领域的准确知识细节,知道一半所以只好虚构另一半。说实话我现在对大模型升级刷存在感已经不怎么关心了,升来升去就那样,已经很难突破瓶颈了,要想真正解决问题还是要自己整好知识库。
本文示例程序的完整源码如下(在 aardio 里粘贴下面的源码,可以一键发布为体积很小的独立 EXE 程序):
import win.ui;
/*DSG{{*/
var winform = win.form(text="lmarena.ai")
/*}}*/
import web.view;
var wb = web.view(winform);
winform.show(3/*_SW_SHOWMAXIMIZED*/);
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'
}
}
wb.go("https://lmarena.ai/?mode=direct");
//跨页面等待指定节点
wb.waitEle2(`button[role="combobox"][data-sentry-source-file="select-model.tsx"]`);
//稍等 1 秒
thread.delay(1000)
//找到节点并模拟点击之
wb.waitEle(`button[role="combobox"][data-sentry-source-file="select-model.tsx"]`,`
this.click()`)
//让网页获得输入焦点
wb.focus()
//获取弹出的 React 下拉框,模拟输入并改变 React 状态值。
wb.waitEle(`input[placeholder="Search models"]`,`
var previousValue = this.value;
this.value = "claude-sonnet-4-20250514";
if(this._valueTracker)this._valueTracker.setValue(previousValue);
//发送事件
this.dispatchEvent(new Event('change', { bubbles: true }));
//这个一直不关的提醒还是删掉吧
document.querySelector('div[data-sentry-source-file="nag-bar.tsx"]').outerHTML = "";
//调用本地代码发送回车
aardio.sendEnter();`);
wb.waitEle(`textarea[placeholder="Ask anything…"]`,`
var previousValue = this.value;
aardio.getSystemPrompt().then(
prompt => {
this.value = prompt;
if(this._valueTracker)this._valueTracker.setValue(previousValue);
this.dispatchEvent(new Event('click', { bubbles: true }));
this.dispatchEvent(new Event('mouseup', { bubbles: true }));
this.dispatchEvent(new Event('focus', { bubbles: true }));
this.dispatchEvent(new Event('input', { bubbles: true }));
this.dispatchEvent(new Event('change', { bubbles: true }));
this.dispatchEvent(new Event('click', { bubbles: true }));
this.dispatchEvent(new Event('mouseup', { bubbles: true }));
this.dispatchEvent(new Event('blur', { bubbles: true }));
this.scrollTop = this.scrollHeight;
}
) `);
win.loopMessage();
相关推荐
- 前沿|一种新的植入药物或可将HIV的预防时间持续一年
-
国外已经批准了一种叫做Truvada(中文名:特鲁瓦达)的药物用于HIV感染的暴露前预防。但是由于该药需要每天服用,因此有些人可能无法坚持,从而使得该药的预防效果降低。最近一项新的研究或许可以改变这种...
- 轻量级埋点sdk搭建,便捷更全面_埋点工具
-
引言借助埋点监控sdk,我们可以统计用户的点击,页面pv、uv,脚本错误、dom上报等关键信息等。一:项目初始化1.技术栈Tsrollup打包工具2.搭建项目npminit-ytsc--in...
- China's Humanoid Robotics Race Heats Up as Tesla's Optimus Hits a Wall
-
TMTPOST--Tesla'sonce-hypedhumanoidrobotproject,Optimus,hashitasnag.Partsprocurementhas...
- 单机训练速度提升640倍!独家解读快手商业广告模型GPU训练平台Persia
-
【导读】:近期,快手宣布将在2020年春节前实现3亿DAU,快手商业化营收步伐也随之加速。快手从2018年“商业化元年”开始推行个性化的广告推荐。截止5月底,快手DAU已经突破2亿。随着用户和使用时长...
- 电气字母符号大全,新人也能轻松上手
-
电气图形符号的形式分2大类:一、图形符号1、基本符号2、一般符号3、明细符号4、派生符号二、文字符号1、基本文字符号(1)单字母符号(2)双字母符号2、辅助文字符号三、最全电气字母符号:流电:DC直...
- Playwright 极速入门:1 小时搞定环境搭建与首个测试脚本
-
一、Playwright简介与核心优势Playwright是微软开源的现代化Web自动化工具,支持Chromium(Chrome/Edge)、Firefox、WebKit(Safari)三...
- 实用知识:常用继电器型号用途,技术参数
-
前言本文将分别着重介绍控制电路常用电器元件之继电器。帮你了解各系列继电器的性能,继电器的用途,规格,型号,以及技术数据。各种型号常用继电器简介:目前常用继电器有多种型号;1.JT3直流电磁继电器。2...
- Python、JavaScript和Rust的Web性能比较
-
Python使用FastApi测试;Node.JS使用Fastify;Rust则使用Actix。选择的Python和Node框架,是在搜索"最快的<某语言>api"时得...
- 不再需要 Javascript 做的五件事_不用javascript可以吗
-
作者:黄子毅有些功能用Javascript实现吃力不讨好,我们要综合使用技术工具,而不是只依赖JS。这篇文章就从五个例子出发,告诉我们哪些功能不一定非要用Javascript做。关注JS太久...
- 万字长文帮你彻底搞懂JS中的Promise
-
Promise是JavaScript异步编程中的重要概念,也是各种面试必考的知识点,今天和大家一起总结下Promise的前世今生,本文篇幅比较长,希望大家耐心阅读。一、同步与异步我们都知道JavaSc...
- 被偷家了!崩溃!!Element-plus组件测试的后续~
-
最新消息,VUE的slot移除产生内存泄漏问题已修复!!!前端佬们嗨起来~---------------------分割线-------------------------------这个是之前...
- 必看!Spring Boot 项目新老版本 Controller 低侵入式切换实战秘籍
-
在当今快速迭代的软件开发环境中,项目的迁移重构是许多开发团队都绕不开的工作。最近,业务方的一个项目就面临着这样的挑战,而在迁移重构的过程中,如何确保下游系统对接无感知成为了重中之重。具体来说,他们需要...
- 使用JS文件调用Google AdSense广告的方法
-
在网页中插入GoogleAdSense广告,一般将源代码直接嵌入主题模板页面。事实上GoogleAdSense支持并允许使用JS文件调用。当然前提是不要因任何原因修改代码,或手动影响广...
- Blazor 学习笔记 - 查缺补漏_查缺补漏怎么用
-
1.简介Blazor是Microsoft推出的开源框架,用于使用C#和.NET构建交互式Web应用程序,减少对JavaScript的依赖。核心特性o使用C#编写前端和后端...
- JavaScript并发控制:从React Suspense到Node.js集群调度
-
为什么并发控制是2025年前端性能的"生死线"当用户在搜索框快速输入关键词时,300ms的卡顿可能导致20%用户流失!这不是设备问题,而是JavaScript单线程模型下的"...
- 一周热门
- 最近发表
-
- 前沿|一种新的植入药物或可将HIV的预防时间持续一年
- 轻量级埋点sdk搭建,便捷更全面_埋点工具
- China's Humanoid Robotics Race Heats Up as Tesla's Optimus Hits a Wall
- 单机训练速度提升640倍!独家解读快手商业广告模型GPU训练平台Persia
- 电气字母符号大全,新人也能轻松上手
- Playwright 极速入门:1 小时搞定环境搭建与首个测试脚本
- 实用知识:常用继电器型号用途,技术参数
- Python、JavaScript和Rust的Web性能比较
- 不再需要 Javascript 做的五件事_不用javascript可以吗
- 万字长文帮你彻底搞懂JS中的Promise
- 标签列表
-
- HTML 简介 (30)
- HTML 响应式设计 (31)
- HTML URL 编码 (32)
- HTML Web 服务器 (31)
- HTML 表单属性 (32)
- HTML 音频 (31)
- HTML5 支持 (33)
- HTML API (36)
- HTML 总结 (32)
- HTML 全局属性 (32)
- HTML 事件 (31)
- HTML 画布 (32)
- HTTP 方法 (30)
- 键盘快捷键 (30)
- CSS 语法 (35)
- CSS 轮廓宽度 (31)
- CSS 谷歌字体 (33)
- CSS 链接 (31)
- CSS 定位 (31)
- CSS 图片库 (32)
- CSS 图像精灵 (31)
- SVG 文本 (32)
- 时钟启动 (33)
- HTML 游戏 (34)
- JS Loop For (32)