当前位置: 首页 > article >正文

browser-use WebUI + DeepSeek 基于AI的UI自动化解决方案

browser-use WebUI

  • 一、browser-use是什么
    • Browser-use采用的技术栈为:
  • 二、browser-use webui 主要功能
    • 使用场景
  • 三、使用教程
    • 1.python 安装
    • 2、把项目clone下来
    • 3、安装依赖
    • 4、配置环境
    • 5、启动
    • 6、配置
      • 1.配置 Agent
      • 2.配置要用的大模型
      • 3.关于浏览器的一些设置
    • 四、DeepSeek 的API获取
    • 五、界面Demo 演示
    • 六、代码示例
      • 1.创建Agent
    • 七、实例展示
      • 一、爬取基金数据
      • 二、效果展示
        • 1、导航到指定网址
        • 2、点击基金排行
        • 3、提取top 10的基金数据
      • 三、总结

一、browser-use是什么

Browser Use 是一款开源Python库,专为大语言模型设计的智能浏览器工具,目的是让 AI 能够像人类一样自然地浏览和操作网页。它支持多标签页管理、视觉识别、内容提取,并能记录和重复执行特定动作。Browser Use 还支持开发者自定义动作,如保存数据到数据库,文件等。支持多种主流的大型语言模型,如 DeepSeek,GPT-4 和 Claude等,并支持同时运行多个任务,具备自我修正功能,从而提高任务执行的准确性和效率。

官网:https://browser-use.com/

项目网址 :https://github.com/browser-use/browser-use

Browser-use采用的技术栈为:

  • 1、Observation:页面解析层,采用DOM解析+截图辅助的非视觉+视觉方案。
    • DOM解析(HTML + XPath):Browser-use通过底层框架(如Playwright)获取当前页面的完整HTML结构,并提取文本、元素属性等关键信息。
    • 截图辅助:在某些情况下(如验证码识别、动态图形验证),纯HTML解析可能无法直接获取信息,此时系统会自动或按需生成页面截图,并将截图作为辅助输入传递给视觉模型
  • 2、Thought:核心决策层,分析Observation提供的页面信息并生成操作指令。
  • 3、Action:指令执行层,微软开发的Playwright作为浏览器控制框架直接与浏览器交互完成自动化任务。Playwright作为新一代高性能UI自动化测试框架,提供低延迟、高稳定性的浏览器控制能力,支持快速页面加载和元素操作。

二、browser-use webui 主要功能

提供了全新的网页界面,简单好用,方便操作。
支持更多大语言模型,比如 Gemini、OpenAI、Azure 等,哦,还有最近爆火的国产大模型 DeepSeek,未来还会加更多。
支持用自己的浏览器,不用再反复登录,还能录屏。
定制了更智能的 Agent,通过优化后的提示让浏览器使用更高效。

使用场景

  • 自动化任务:适合重复高频的浏览器操作任务,如表单填写,信息检索,文件下载
  • 数据收集:适合爬取网络上的数据,如爬虫自动化测试:适合WEB UI
  • 自动化测试,结合pytest轻松实现web自动化

三、使用教程

1.python 安装

python 官网: https://www.python.org/downloads/版本必须在 3.11 以上。

2、把项目clone下来

git clone https://github.com/browser-use/web-ui.git
cd web-ui

3、安装依赖

pip install browser-use
playwright install
pip install -r requirements.txt

4、配置环境

基于 .env.example 复制一个 .env 文件,并在 .env 文件中修改以下信息

# 路径 Chrome 浏览器路径(检查下自己的路径),例如
# Mac OS "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
# Windows "C:\Program Files\Google\Chrome\Application\chrome.exe"
CHROME_PATH="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"# 浏览器的用户数据路径,例如
# Mac OS "/Users/<YourUsername>/Library/Application Support/Google/Chrome"
# Windows "C:\Users\<YourUsername>\AppData\Local\Google\Chrome\User Data"
CHROME_USER_DATA="/Users/<YourUsername>/Library/Application Support/Google/Chrome"# 还有一些大模型的 API Key 也要改
...

5、启动

执行如下命令启动

python webui.py --ip 127.0.0.1 --port 7788

启动成功如下所示:
在这里插入图片描述
浏览器访问 http://127.0.0.1:7788/,看到如下界面就成功了
在这里插入图片描述

6、配置

1.配置 Agent

注意,这里的 Use Vision,默认是选中状态,如果使用的 DeepSeek 不能勾选,因为 DeepSeek 不支持视觉输入,注意这里很多人踩坑,一定要注意。
在这里插入图片描述

2.配置要用的大模型

例如,下面我用的是 deepseek。
在这里插入图片描述

3.关于浏览器的一些设置

在这里插入图片描述

四、DeepSeek 的API获取

DeepSeek :https://platform.deepseek.com/api_keys
在这里插入图片描述

五、界面Demo 演示

输入要执行的任务就可以点击 Run Agent 了
在这里插入图片描述
以下是运行时的项目日志输出,记录了执行步骤
在这里插入图片描述
执行的过程中也会打开浏览器和跳转到目标网站,按照区块一样对页面元素做标注。
在这里插入图片描述
在 Recodings 下会记录执行过程和反馈结果,还可以回看的。
在这里插入图片描述

六、代码示例

1.创建Agent

from langchain_openai import ChatOpenAI
from browser_use import Agent
import asyncioasync def main():agent = Agent(task="Go to Reddit, search for 'browser-use' in the search bar, click on the first post and return the first comment.",llm=ChatOpenAI(model="gpt-4o"),)result = await agent.run()print(result)asyncio.run(main())

如果没有openai-key的可以使用其他模型,下面以DeepSeek为例:

该文件在 browser-use/examples/deepseek.py

import asyncio
import osfrom dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from pydantic import SecretStrfrom browser_use import Agent# dotenv
load_dotenv()api_key = os.getenv('DEEPSEEK_API_KEY', 'sk-xxxxxx')
if not api_key:raise ValueError('DEEPSEEK_API_KEY is not set')async def run_search():agent = Agent(task=("1. 在搜索框中输入抖音并搜索"'2. 点击搜索结果中的第一个链接''3. 关闭扫码登录'	'3. 返回第一个视频的内容'),llm=ChatOpenAI(base_url='https://api.deepseek.com/v1',model='deepseek-chat',api_key=SecretStr(api_key),),use_vision=False,)await agent.run()if __name__ == '__main__':asyncio.run(run_search())

运行结果如下:
在这里插入图片描述

七、实例展示

一、爬取基金数据

llm = ChatOpenAI(model='deepseek-chat',api_key='*************',base_url='https://api.deepseek.com',temperature=0
)asyncdefmain():agent = Agent(task="""1、导航到网址:https://fund.eastmoney.com/2、点击基金排行3、返回排行前10的基金数据,以json格式返回""",llm=llm,use_vision=False,)result = await agent.run()print(result.final_result())asyncio.run(main())

二、效果展示

1、导航到指定网址

在这里插入图片描述

2、点击基金排行

在这里插入图片描述

3、提取top 10的基金数据
DEBUG    [browser_use] --act Execution time: 0.00 seconds
INFO     [controller] 📄  Extracted from page
: ```json
{
"top_10_funds": [{"rank": 1,"fund_code": "018124","fund_name": "永赢先进制造智选混合发起A","date": "03-07","unit_net_value": "2.1654","cumulative_net_value": "2.1654","daily_growth_rate": "2.21%","1_week": "9.15%","1_month": "17.58%","3_months": "64.06%","6_months": "191.13%","1_year": "115.94%","since_inception": "116.54%","handling_fee": "0.15%"},{"rank": 2,"fund_code": "018125","fund_name": "永赢先进制造智选混合发起C","date": "03-07","unit_net_value": "2.1501","cumulative_net_value": "2.1501","daily_growth_rate": "2.21%","1_week": "9.15%","1_month": "17.54%","3_months": "63.89%","6_months": "190.55%","1_year": "115.07%","since_inception": "115.01%","handling_fee": "0.00%"},{"rank": 3,"fund_code": "016530","fund_name": "鹏华碳中和主题混合A","date": "03-07","unit_net_value": "1.7881","cumulative_net_value": "1.7881","daily_growth_rate": "3.00%","1_week": "10.23%","1_month": "22.92%","3_months": "68.07%","6_months": "178.39%","1_year": "104.00%","since_inception": "78.81%","handling_fee": "0.15%"},{"rank": 4,"fund_code": "016531","fund_name": "鹏华碳中和主题混合C","date": "03-07","unit_net_value": "1.7685","cumulative_net_value": "1.7685","daily_growth_rate": "3.00%","1_week": "10.21%","1_month": "22.86%","3_months": "67.81%","6_months": "177.59%","1_year": "102.79%","since_inception": "76.85%","handling_fee": "0.00%"},{"rank": 5,"fund_code": "001970","fund_name": "泰信鑫选灵活配置混合A","date": "03-07","unit_net_value": "1.3310","cumulative_net_value": "1.3310","daily_growth_rate": "-1.04%","1_week": "7.25%","1_month": "4.80%","3_months": "31.00%","6_months": "125.59%","1_year": "95.45%","since_inception": "33.10%","handling_fee": "0.15%"},{"rank": 6,"fund_code": "002580","fund_name": "泰信鑫选灵活配置混合C","date": "03-07","unit_net_value": "1.3220","cumulative_net_value": "1.3220","daily_growth_rate": "-0.97%","1_week": "7.31%","1_month": "4.84%","3_months": "31.15%","6_months": "125.60%","1_year": "95.27%","since_inception": "31.67%","handling_fee": "0.00%"},{"rank": 7,"fund_code": "016295","fund_name": "新华利率债债券E","date": "03-07","unit_net_value": "1.7977","cumulative_net_value": "1.9906","daily_growth_rate": "-0.13%","1_week": "-0.06%","1_month": "-0.66%","3_months": "0.85%","6_months": "94.13%","1_year": "92.89%","since_inception": "99.00%","handling_fee": "0.00%"},{"rank": 8,"fund_code": "019457","fund_name": "平安先进制造主题股票发起A","date": "03-07","unit_net_value": "1.7593","cumulative_net_value": "1.7593","daily_growth_rate": "1.78%","1_week": "10.41%","1_month": "23.92%","3_months": "57.40%","6_months": "134.29%","1_year": "90.71%","since_inception": "75.93%","handling_fee": "0.15%"},{"rank": 9,"fund_code": "019458","fund_name": "平安先进制造主题股票发起C","date": "03-07","unit_net_value": "1.7452","cumulative_net_value": "1.7452","daily_growth_rate": "1.78%","1_week": "10.40%","1_month": "23.87%","3_months": "57.17%","6_months": "133.60%","1_year": "89.59%","since_inception": "74.52%","handling_fee": "0.00%"},{"rank": 10,"fund_code": "007713","fund_name": "华富科技动能混合A","date": "03-07","unit_net_value": "1.4600","cumulative_net_value": "1.5100","daily_growth_rate": "1.47%","1_week": "8.19%","1_month": "18.94%","3_months": "47.07%","6_months": "135.41%","1_year": "89.14%","since_inception": "51.93%","handling_fee": "0.15%"}]
}

二、结合pytest实现页面自动化测试
异步执行需要安装插件pytest-asyncio

pip install pytest-asyncio
@pytest.mark.asyncio
@pytest.mark.parametrize("username,password,expected", [("kevin@xxxx.com", "a123456", "kevin"),("kevin@xxxx.com", "123456", "账号密码输入错误")])
asyncdeftest_login(username, password, expected):agent = Agent(task=f"""1、导航到网址:https://xxxxxxx.com2、输入用户名:{username}, 密码:{password}3、点击登录按钮4、验证是否登录成功,登录成功返回{expected}""",llm=llm,use_vision=False,)result = await agent.run()assert expected in str(result.final_result())

三、总结

Browser Use 深度集成大语言模型(LLM),通过语义理解与视觉决策链实现零硬编码自动化,彻底颠覆传统脚本开发模式。AI 自动解析页面结构、动态生成操作路径,无需人工编写 XPath/CSS 定位器,开发效率提升 5 倍以上,尤其擅长处理动态验证、反爬策略及多步骤交互场景,成为金融数据抓取、跨平台测试的新一代智能引擎。

相关文章:

browser-use WebUI + DeepSeek 基于AI的UI自动化解决方案

browser-use WebUI 一、browser-use是什么Browser-use采用的技术栈为&#xff1a; 二、browser-use webui 主要功能使用场景 三、使用教程1.python 安装2、把项目clone下来3、安装依赖4、配置环境5、启动6、配置1.配置 Agent2.配置要用的大模型3.关于浏览器的一些设置 四、Deep…...

51单片机和STM32 入门分析

51单片机和STM32是嵌入式开发中两种主流的微控制器&#xff0c;它们在架构、性能、应用场景等方面存在显著差异。以下是两者的对比分析及选择建议&#xff1a; 1. 51单片机与STM32的定义与特点 51单片机 定义&#xff1a;基于Intel 8051内核的8位微控制器&#xff0c;结构简单…...

什么是YApi?开源接口管理平台部署教程

YApi 到底是个啥&#xff1f; 各位小伙伴们好呀&#xff01;今天要给大家介绍的是一款超级好用的接口管理神器——YApi&#xff01;它是一个高效、易用、功能强大的 API 管理平台&#xff0c;简直就是开发、产品、测试人员的福音啊&#xff01;&#xff01;&#xff01;它能帮…...

golang-struct结构体

struct结构体 概述 Go 语言中数组可以存储同一类型的数据&#xff0c;但在结构体中我们可以为不同项定义不同的数据类型。 结构体是 Golang 中一种复合类型&#xff0c;它是由一组具有相同或不同类型的数据字段组成的数据结构。 结构体是一种用户自定义类型&#xff0c;它可…...

深入理解事务

在数据库管理中&#xff0c;事务是一个至关重要的概念。无论是金融交易、库存管理还是用户数据更新&#xff0c;事务都确保了数据的完整性和一致性。本文将详细介绍为什么需要事务、什么是事务、事务的四大特征、如何在MySQL中使用事务以及MyBatis对事务的配置。 一、为什么需…...

基于SpringBoot + Vue 的药店药品信息管理系统

基于SpringBootVue的药品药店药房信息系统(带文档) 角色: 用户&#xff0c;管理员&#xff0c;员工 功能: 管理员: 首页、个人中心、用户管理、员工管理、药品类别管理、药品信息管理、药品入库管理、药品出库管理、在线咨询管理、留言板管理、系统管理、订单管理。 用户:…...

ubuntu下TFTP服务器搭建

tftp 命令的作用和 nfs 命令一样&#xff0c;都是用于通过网络下载东西到 DRAM 中&#xff0c;只是 tftp 命令 使用的 TFTP 协议&#xff0c; Ubuntu 主机作为 TFTP 服务器。因此需要在 Ubuntu 上搭建 TFTP 服务器&#xff0c; 需要安装 tftp-hpa 和 tftpd-hpa&#xff0c;命令…...

解决:ModuleNotFoundError: No module named ‘_sqlite3‘

报错&#xff1a; from _sqlite3 import * ModuleNotFoundError: No module named _sqlite3安装sqlite3支持组件: sudo apt-get install libsqlite3-dev进入之前下载的python包下&#xff0c;重新编译和安装Python ./configure --enable-loadable-sqlite-extensions make &a…...

技术债务的隐患:何时重构,何时妥协?

在快节奏的软件开发环境中&#xff0c;企业为了抢占市场或满足紧迫需求&#xff0c;往往不得不在短期内采取“捷径”来加速产品交付&#xff0c;这便引入了“技术债务”。短期内看似能迅速交付&#xff0c;但随着时间推移&#xff0c;这些未优化的代码和架构缺陷会逐渐累积&…...

c#Winform也可以跨平台了GTK框架GTKSystem.Windows.Forms

一、简介 >> 新版下载&#xff0c;问题求助 QQ群&#xff1a;1011147488 1032313876 236066073&#xff08;满&#xff09; Visual Studio原生开发&#xff0c;无需学习&#xff0c;一次编译&#xff0c;跨平台运行. C#桌面应用程序跨平台&#xff08;windows、linux、…...

ABAP PDF预览

画个屏幕 PDF JPG TXT都可以参考预览&#xff0c;把二进制流传递给标准函数就行 *&---------------------------------------------------------------------* *& Report YDEMO2 *&---------------------------------------------------------------------* *&am…...

网络爬虫【爬虫库urllib】

我叫不三不四&#xff0c;很高兴见到大家&#xff0c;欢迎一起学习交流和进步 今天来讲一讲爬虫 urllib介绍 Urllib是Python自带的标准库&#xff0c;无须安装&#xff0c;直接引用即可。 Urllib是一个收集几个模块来使用URL的软件包&#xff0c;大致具备以下功能。 ● urlli…...

卷积神经网络 - 卷积层

卷积神经网络一般由卷积层、汇聚层和全连接层构成&#xff0c;本文我们来学习卷积层。 卷积层&#xff08;Convolutional Layer&#xff09;是卷积神经网络&#xff08;CNN&#xff09;的核心组件&#xff0c;专门用于处理具有网格结构的数据&#xff08;如图像、音频、时间序…...

玩转 Tailwind CSS:深入解析函数与指令

玩转 Tailwind CSS&#xff1a;深入解析函数与指令 如果你正在使用 Tailwind CSS&#xff0c;可能已经习惯了各种 text-center、mt-4 这样的类名&#xff0c;但你知道吗&#xff1f;Tailwind 其实还隐藏着一套 强大的函数与指令系统&#xff0c;可以让你的代码更加优雅、可维护…...

Axure设计之下拉多选框制作教程C(中继器)

利用Axure制作下拉多选器组件可以极大地提升原型制作的效率和效果。以下是基于你提供的详细步骤的详细指导&#xff0c;帮助你在Axure中实现一个功能完善、高保真且可复用的下拉多选器组件。 一、案例预览 预览地址&#xff1a;https://pghy0i.axshare.com 实现效果包括&#…...

本地部署Jina AI Reader:用Docker打造你的智能解析引擎

本地部署Jina AI Reader&#xff1a;用Docker打造你的智能解析引擎 &#x1f31f; 引言&#xff1a;为什么需要本地部署&#xff1f;&#x1f4cc; 场景应用图谱&#x1f527; 部署指南&#xff08;Linux环境&#xff09;1. 环境准备2. Docker部署3. 验证服务状态 &#x1f680…...

Java基础语法练习42(基本绘图-基本的事件处理机制-小坦克的绘制-键盘控制坦克移动)

目录 一、图形的基本绘制 1.基本介绍&#xff1a; 2.入门代码如下&#xff1a; 3.常用图形的绘制, 示例代码如下&#xff1a; 二、坦克的绘制 三、事件处理机制 四、坦克的移动 一、图形的基本绘制 1.基本介绍&#xff1a; Component 类提供了两个和绘图相关最重要的方…...

RabbitMQ 入门

RabbitMQ 入门 1RabbitMQ 介绍 RabbitMQ 是信息传输的中间者。本质上&#xff0c;他从生产者&#xff08;producers&#xff09;接收消息&#xff0c;转发这些消息给消费者&#xff08;consumers&#xff09;.换句话说&#xff0c;他能够按根据你指定的规则进行消息转发、缓冲…...

yolo环境 pytorch环境配置 CUDA安装

我的成功案例&#xff1a;首先安装python 3.12.9的conda虚拟环境 &#xff08;如果不安装3.12的会报错误ModuleNotFoundError&#xff1a;没有名为“numpy._core”的模块&#xff09; 然后安装11.8cuda &#xff08;其实我是可以最高安装12.6的cuda但我实测&#xff0c;太高版…...

ESP32(4)TCP通信

本章重点讲解 lwIP 的 Socket接口如何配置 TCP客户端&#xff0c;并在此基础上实现收发功能。 TCP Client 连接流程 在实现 TCP 协议之前&#xff0c;用户需要按照以下步骤配置结构体 sockaddr_in 的成员变量&#xff0c;以便建立 TCPClient 连接&#xff1a; ①&#xff1a;…...

【从零开始学习计算机科学】软件测试(二)单元测试 与 集成测试

【从零开始学习计算机科学】软件测试(二)单元测试 与 集成测试 单元测试概述单元测试的内容单元测试的优点单元测试的停止准则单元测试的过程与文档管理单元测试的任务集成测试集成测试关注的问题模块分析集成测试与系统测试的区别集成测试与开发的关系集成测试的层次集成测试…...

数学建模:MATLAB循环神经网络

一、简述 1.循环神经网络 循环神经网络&#xff08;RNN&#xff09;是一种用于处理序列数据的神经网络。不同于传统的前馈神经网络&#xff0c;RNN在隐藏层中加入了自反馈连接&#xff0c;使得网络能够对序列中的每个元素执行相同的操作&#xff0c;同时保持一个“记忆”状态…...

EagleTrader为何重申重要数据前后2分钟禁止交易?

3月12日&#xff0c;美国公布了2月份的CPI数据。 美国2月未季调CPI年率录得2.8%&#xff0c;为去年11月来新低&#xff0c;低于市场预期的2.9%。 美国2月季调后CPI月率录得0.2%&#xff0c;为去年10月来新低&#xff0c;预期值为0.3%&#xff0c;前值为0.5%。 数据公布后&#…...

【Spring】声明式事务传播机制

1. 所有传播行为 REQUIRED&#xff08;默认类型&#xff09;&#xff1a; 如果当前存在事务&#xff0c;则加入该事务&#xff1b;如果没有&#xff0c;则新建一个事务。适用于大多数业务场景。 SUPPORTS&#xff1a; 如果当前存在事务&#xff0c;则加入该事务&#xff1b;…...

个人blog系统 前后端分离 前端js后端go

系统设计&#xff1a; 1.使用语言&#xff1a;前端使用vue&#xff0c;并使用axios向后端发送数据。后端使用的是go的gin框架&#xff0c;并使用grom连接数据库实现数据存储读取。 2.设计结构&#xff1a; 最终展示&#xff1a;仅展示添加模块&#xff0c;其他模块基本相似 前…...

单元测试mock

一、背景 现在有A类,B类,C类&#xff0c;A类依赖B类,依赖C类&#xff0c;如果想要测试A类中的某个方法的业务逻辑。A类依赖其他类&#xff0c;则把其他类给mock&#xff0c;然后A类需要真实对象。这样就可以测试A类中的方法。 举例&#xff1a;Ticket类需要调用Flight类和Pas…...

OpenGL 将屏幕上的二维坐标转换为三维空间中的一个点

本文主要介绍将屏幕上的二维坐标转换为三维空间中的一个点&#xff0c;该点位于 近 平面上&#xff08;即 Z 坐标为 -1&#xff09;。 一、步骤概述 屏幕坐标到标准化设备坐标 (NDC): 将屏幕坐标 (x, y) 转换为 NDC 坐标系。NDC 到相机空间: 使用逆投影矩阵将 NDC 坐标转换到相…...

golang接口用法-代码案例

文章目录 Go语言中接口&#xff08;interface&#xff09;的含义接口的常见应用场景示例1示例2&#xff08;Dog 和 Cat&#xff09;使用场景-多数据库 Go语言中接口&#xff08;interface&#xff09;的含义 接口在Go语言中是一种类型&#xff0c;它定义了一组方法的集合。一个…...

ORA-12162: TNS:net service name is incorrectly specified

1.现象 SQL plus 连接实例报错&#xff0c;已确定实例是open状态。 [rootlocalhost ~]# su - oracle [oraclelocalhost ~]$ sqlplus / as sysdbaSQL*Plus: Release 19.0.0.0.0 - Production on Sat Mar 15 10:20:56 2025 Version 19.11.0.0.0Copyright (c) 1982, 2020, Orac…...

基于 Verilog 的时序设计:从理论到实践的深度探索

在数字电路设计领域,时序设计是一个至关重要的环节,它涉及到组合逻辑电路与时序逻辑电路的设计差异、时钟信号的运用以及触发器的工作原理等多个方面。本文将围绕基于 Verilog 的时序设计实验展开,详细阐述实验过程、代码实现以及结果分析,帮助读者深入理解时序设计的核心概…...