百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

自动操作 lmarena 免费的 Claude 大模型 - React 前端自动化控制实例

myzbx 2025-08-31 06:00 20 浏览

大模型竞技场 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();

相关推荐

如何设计一个优秀的电子商务产品详情页

加入人人都是产品经理【起点学院】产品经理实战训练营,BAT产品总监手把手带你学产品电子商务网站的产品详情页面无疑是设计师和开发人员关注的最重要的网页之一。产品详情页面是客户作出“加入购物车”决定的页面...

怎么在JS中使用Ajax进行异步请求?

大家好,今天我来分享一项JavaScript的实战技巧,即如何在JS中使用Ajax进行异步请求,让你的网页速度瞬间提升。Ajax是一种在不刷新整个网页的情况下与服务器进行数据交互的技术,可以实现异步加...

中小企业如何组建,管理团队_中小企业应当如何开展组织结构设计变革

前言写了太多关于产品的东西觉得应该换换口味.从码农到架构师,从前端到平面再到UI、UE,最后走向了产品这条不归路,其实以前一直再给你们讲.产品经理跟项目经理区别没有特别大,两个岗位之间有很...

前端监控 SDK 开发分享_前端监控系统 开源

一、前言随着前端的发展和被重视,慢慢的行业内对于前端监控系统的重视程度也在增加。这里不对为什么需要监控再做解释。那我们先直接说说需求。对于中小型公司来说,可以直接使用三方的监控,比如自己搭建一套免费的...

Ajax 会被 fetch 取代吗?Axios 怎么办?

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!今天给大家带来的主题是ajax、fetch...

前端面试题《AJAX》_前端面试ajax考点汇总

1.什么是ajax?ajax作用是什么?AJAX=异步JavaScript和XML。AJAX是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX可以使网页实...

Ajax 详细介绍_ajax

1、ajax是什么?asynchronousjavascriptandxml:异步的javascript和xml。ajax是用来改善用户体验的一种技术,其本质是利用浏览器内置的一个特殊的...

6款可替代dreamweaver的工具_替代powerdesigner的工具

dreamweaver对一个web前端工作者来说,再熟悉不过了,像我07年接触web前端开发就是用的dreamweaver,一直用到现在,身边的朋友有跟我推荐过各种更好用的可替代dreamweaver...

我敢保证,全网没有再比这更详细的Java知识点总结了,送你啊

接下来你看到的将是全网最详细的Java知识点总结,全文分为三大部分:Java基础、Java框架、Java+云数据小编将为大家仔细讲解每大部分里面的详细知识点,别眨眼,从小白到大佬、零基础到精通,你绝...

福斯《死侍》发布新剧照 "小贱贱"韦德被改造前造型曝光

时光网讯福斯出品的科幻片《死侍》今天发布新剧照,其中一张是较为罕见的死侍在被改造之前的剧照,其余两张剧照都是死侍在执行任务中的状态。据外媒推测,片方此时发布剧照,预计是为了给不久之后影片发布首款正式预...

2021年超详细的java学习路线总结—纯干货分享

本文整理了java开发的学习路线和相关的学习资源,非常适合零基础入门java的同学,希望大家在学习的时候,能够节省时间。纯干货,良心推荐!第一阶段:Java基础重点知识点:数据类型、核心语法、面向对象...

不用海淘,真黑五来到你身边:亚马逊15件热卖爆款推荐!

Fujifilm富士instaxMini8小黄人拍立得相机(黄色/蓝色)扫二维码进入购物页面黑五是入手一个轻巧可爱的拍立得相机的好时机,此款是mini8的小黄人特别版,除了颜色涂装成小黄人...

2025 年 Python 爬虫四大前沿技术:从异步到 AI

作为互联网大厂的后端Python爬虫开发,你是否也曾遇到过这些痛点:面对海量目标URL,单线程爬虫爬取一周还没完成任务;动态渲染的SPA页面,requests库返回的全是空白代码;好不容易...

最贱超级英雄《死侍》来了!_死侍超燃

死侍Deadpool(2016)导演:蒂姆·米勒编剧:略特·里斯/保罗·沃尼克主演:瑞恩·雷诺兹/莫蕾娜·巴卡林/吉娜·卡拉诺/艾德·斯克林/T·J·米勒类型:动作/...

停止javascript的ajax请求,取消axios请求,取消reactfetch请求

一、Ajax原生里可以通过XMLHttpRequest对象上的abort方法来中断ajax。注意abort方法不能阻止向服务器发送请求,只能停止当前ajax请求。停止javascript的ajax请求...