基于Browser Use + Playwright 实现AI Agent操作Web UI自动化

news2025/5/23 9:42:40

Browser Use是什么

Browser Use是一个开源项目官网:Browser Use - Enable AI to control your browser,专为大语言模型(LLM)设计的只能浏览器工具,能够让AI像人类一样自然的浏览和操作网页,支持多标签页管理,视觉识别,内容提取,并能记录和重复执行特定动作。

Browser Use 的技术原理

  • 集成 LLM 模型:集成大型语言模型(LLM)理解和执行复杂的网页任务。

  • 浏览器自动化:用自动化工具如 Playwright,模拟人类用户的浏览器操作。

  • 异步编程:支持异步编程,让 AI 代理能非阻塞地执行网络请求和浏览器操作。

  • 自定义动作注册:支持开发者用装饰器或 Pydantic 模型注册自定义动作,扩展 AI 代理的功能。

  • 上下文管理:基于浏览器上下文(Browser Context)管理不同代理的独立会话,保持状态隔离。

  • XPath 和元素定位:用 XPath 和其他方法定位网页元素,实现精确的网页交互。

Playwright是什么

playwright是由微软开发的Web UI自动化测试工具,支持多种语言如Python,js,Java,其核心特性如下:

  • 跨浏览器兼容性:支持Chromium、Firefox和WebKit。

  • 灵活的运行模式:提供无头模式和有头模式,便于调试与持续集成。

  • 智能的等待机制:减少了显式等待的必要性。

  • 全面的API支持:能处理页面交互、网络请求以及文件上传下载等复杂操作。

快速开始

Browser-use 需要 Python 3.11 或更高版本。首先,通过 pip 安装该工具:

pip install browser-use

接下来,安装 Playwright,这是 Browser-use 的依赖项:

playwright install

还需要调用大语言模型的第三方库

pip install langchain_openai

本地环境增加.env文件用于保存大模型的KEY放到环境变量中,保证隐私

API_KEY = 'xxxxx'

WebUI自动化demo

from langchain_openai import ChatOpenAI
from browser_use import Agent
import asyncio, os
from dotenv import load_dotenv
# 加载环境变量
load_dotenv()
​
​
async def main():
    # 初始化模型
    llm = ChatOpenAI(
        base_url="https://api.XXXX.cn/v1",  # 调用的LLM api地址
        model="XXXXX", # 调用的具体模型
        api_key=os.getenv('API_KEY')  # 取自.env中的key
    )
​
    # 创建Agent并定义UI测试任务
    agent = Agent(
        task="""
        1. 访问百度首页(https://www.baidu.com/)
        2. 选择账号登录,账号:12345678907,密码:123
        3. 勾选阅读百度协议,点击登录
        4. 点击导航栏的“新闻”菜单
        5. 列出“热点要闻”板块中前五条新闻的标题和发布时间,
        用json格式返回结果,示例格式如下:
        [ { title: '新闻标题1', publish_time: '5月21日 13:20'}]
        """,
        llm=llm,
        use_vision=False  # 禁用视觉模式,依赖DOM解析
    )
    # 执行任务后输出结果
    result = await agent.run()
    print(result.final_result())
​
asyncio.run(main())

提示词总结

Browser Use中定义了提示词类,详情请看site-packages/browser_use/agent/system_prompt.md文件,该文件中有详细的系统提示词要求,比如给AI设定了身份,告知AI需要做什么,以什么格式返回。

输入格式以及内容

输入内容包括:

-任务

-之前的步骤

-当前网址

-打开的标签页

-交互元素

-[index]文本

  • 索引:用于交互的数字标识符

  • 类型:HTML元素类型(按钮、输入框等)

  • 文本:元素描述 示例: [33]提交表单

  • 带[]数字索引的元素是可交互的

  • 无[]的元素仅提供上下文

响应规则
  1. 响应格式:必须始终以有效JSON格式响应,格式如下: {"current_state": {"evaluation_previous_goal": "成功|失败|未知 - 分析当前元素和图片,检查之前的目标/动作是否按预期完成。说明是否出现意外情况", "memory": "描述已完成事项和需要记住的内容。必须具体说明操作次数和剩余数量。例如:已分析0/10个网站。继续处理abc和xyz", "next_goal": "下一步需要立即完成的目标描述"}, "action":[{"one_action_name": {//动作参数}}]}

  2. 动作规则:

  • 可指定多个连续动作

  • 每个动作只能包含一个动作名称

  • 最多使用{{max_actions}}个动作 常见动作序列:

  • 表单填写:[{"input_text": {"index": 1, "text": "用户名"}}, {"input_text": {"index": 2, "text": "密码"}}, {"click_element": {"index": 3}}]

  • 导航与提取:[{"go_to_url": {"url": "Example Domain"}}, {"extract_content": {"goal": "提取姓名"}}]

  • 动作按顺序执行

  • 页面状态变化后中断序列

  • 仅在动作不改变页面时使用多动作

  • 优先使用高效动作(如批量填写表单)

  1. 元素交互:

  • 仅使用交互元素的索引

  • 标记为"[]非交互文本"的元素不可操作

  1. 导航与错误处理:

  • 无合适元素时使用替代功能

  • 卡顿时尝试:

  • 返回上一页

  • 新建搜索

  • 新开标签页

  • 处理弹窗/cookie:接受或关闭

  • 使用滚动查找目标元素

  • 重新搜索时打开新标签页

  • 出现验证码时尝试解决

  • 页面未加载完成时使用等待动作

  1. 任务完成:

  • 任务完全达成时使用done动作

  • 达到max_steps限制时也需调用done:

  • 成功完成所有要求设success为true

  • 未完成则设success为false

  • 对重复任务(如"每个"、"所有"):

  • 在memory中持续计数(已完成X次,剩余Y次)

  • 仅在完成全部次数后使用done

  1. 视觉上下文:

  • 使用图片理解页面布局

  • 图片中的带标签边界框对应元素索引

  1. 表单填写:

  • 填写输入框后若序列中断

  • 可能出现自动建议/弹窗

  1. 长任务:

  • 在memory中持续追踪状态和子结果

  1. 内容提取:

  • 寻找信息时对特定页面调用extract_content

  • 响应必须始终为符合格式的JSON

示例中文响应

{"current_state": {"evaluation_previous_goal": "成功 - 已正确跳转到登录页面", "memory": "已打开3个标签页,完成0/3个网站分析,需继续提取剩余网站数据", "next_goal": "在当前页面填写登录表单并提交"}, "action":[{"input_text": {"index": 1, "text": "用户名"}}, {"input_text": {"index": 2, "text": "密码"}}, {"click_element": {"index": 3}}]}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2383793.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Origin绘制多因子柱状点线图

多因子柱状点线图是一种结合柱状图和点线图的复合图表,常用于同时展示多个因子(变量)在不同分组下的分布和趋势变化。 适用场景: (1)比较多个因子在不同分组中的数值大小(柱状图)&a…

Web漏洞扫描服务的特点与优势:守护数字时代的安全防线

在数字化浪潮中,Web应用程序的安全性已成为企业业务连续性和用户信任的核心要素。随着网络攻击手段的不断升级,Web漏洞扫描服务作为一种主动防御工具,逐渐成为企业安全体系的标配。本文将从特点与优势两方面,解析其价值与应用场景…

抛弃传统P2P技术,EasyRTC音视频基于WebRTC打造教育/会议/远程巡检等场景实时通信解决方案

一、方案背景 随着网络通信发展,实时音视频需求激增。传统服务器中转方式延迟高、资源消耗大,WebP2P技术由此兴起。EasyRTC作为高性能实时通信平台,集成WebP2P技术,实现低延迟、高效率音视频通信,广泛应用于教育、医疗…

俄罗斯军总参情报局APT28组织瞄准援乌后勤供应链发起全球网络攻击

2025年5月,由美国、英国、欧盟和北约网络安全与情报机构联合发布的最新网络安全公告披露,俄罗斯军总参情报局(GRU)第85特别服务中心第26165部队(又称APT28、Fancy Bear、Forest Blizzard和BlueDelta)正持续…

杰发科技AC7801——PWM获取固定脉冲个数

测试通道6 在初始化时候打开通道中断 void PWM1_GenerateFrequency(void) {PWM_CombineChConfig combineChConfig[1]; //组合模式相关结构体PWM_IndependentChConfig independentChConfig[2];//独立模式相关结构体PWM_ModulationConfigType pwmConfig; //PWM模式相关结构体PWM…

MacBookPro上macOS安装第三方应用报错解决方案:遇到:“无法打开“XXX”,因为无法确定(验证)开发者身份?怎么解决

MacBook Pro 上 macOS 安装第三方应用报错解决方案 —— 彻底搞定「无法打开“XXX”,因为无法确定开发者身份」 适用系统:macOS Catalina 10.15 ~ macOS Sonoma 14.x 适用机型:Intel / Apple Silicon 全系 MacBook Pro 文章目录 **MacBook P…

RAG(Retrieval-Augmented-Generation)检索增强生成

什么是RAG(检索增强生成)? RAG是一种AI框架,结合传统的数据检索技术和LLM(大语言模型)的优势,通过将外部数据和LLM生成语言技能集合,对LLM的输出进行优化,使输出更准确、…

黑马点评前端Nginx启动失败问题解决记录

Nginx启动失败问题解决记录 问题描述 在学习黑马Redis课程时,启动黑马点评Nginx前端项目发现: 无法访问8080端口检查Windows端口占用情况(无占用)结论:Nginx服务未成功启动 错误日志分析 在nginx安装目录下的logs…

第12天-Python+Qt5开发实战:10大经典案例与深度解析

1. 基础窗口与信号槽机制 python 复制 下载 import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButtonclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("信号槽示例")btn = QPushButton("…

人工智能培训:解锁未来职场竞争力的核心路径与课程内容解析

当AI绘画工具在几秒内生成一幅媲美专业画师的作品,当AI程序员自主优化代码逻辑,当AI客服精准解答复杂问题——一个现实愈发清晰:人工智能正在重新定义“专业能力”的边界。 对于普通人而言,这场变革既带来焦虑,也孕育机…

深入解析Java泛型:从定义到实战应用

目录 🚀前言🤔泛型的定义🐧泛型类🌟泛型接口✍️泛型方法、通配符、上下限💯泛型方法💯 通配符与上下限⚙️通配符(Wildcard)⚙️泛型上下限⚙️应用场景 🦜泛型支持的类…

【开源】一个基于 Vue3 和 Electron 开发的第三方网易云音乐客户端,具有与官方客户端相似的界面布局

🎵 XCMusic:高颜值第三方网易云音乐客户端 🎶 📍 项目亮点 XCMusic 是一款基于Vue3Electron开发的开源、跨平台网易云音乐客户端。 此音乐播放器基于 Electron 开发,旨在为用户提供简洁、美观、兼容多平台的音乐体验。…

labview设计一个虚拟信号发生器

目标:设计一个虚拟信号发生器,通过功能键的设置可以产生正弦波、三角波、方波和锯齿波,并可以通过输入控件设置采集信号的频率、幅值、相位等参数。 一、正弦波 (1)创建一个枚举 (2)点击属性后…

工业路由器WiFi6+5G的作用与使用指南,和普通路由器对比

工业路由器的技术优势 在现代工业环境中,网络连接的可靠性与效率直接影响生产效率和数据处理能力。WiFi 6(即802.11ax)和5G技术的结合,为工业路由器注入了强大的性能,使其成为智能制造、物联网和边缘计算的理想选择。…

编译Qt5.15.16并启用pdf模块

编译Qt5.15.16并启用pdf模块 标题1.目录设置 -q-bulid –qt-everywhere-src-5.15.16 –bulid cd bulid 必须,否则会提示Project ERROR: You cannot configure qt separately within a top-level build. create .qmake.stash and .qmake.super in build folder …

Python绘制新冠疫情的知识图谱

from pyvis.network import Network import networkx as nx import pandas as pd import os# 修复模板路径 from pyvis import network as net_moduleos.environ["PATH"] os.pathsep os.path.dirname(net_module.__file__)# 创建紧密连接图 g nx.Graph()# 关键修…

使用RUST在Arduino上进行编程(MacOS,mega板)

近年来,RUST成为了嵌入式编程的热门语言,本文通过实现(1)LED闪灯,以及(2)在console(终端)实现“Hello Rust World”两项功能来完成实操的入门。 深入学习可以参考RUST语言…

大模型微调与高效训练

随着预训练大模型(如BERT、GPT、ViT、LLaMA、CLIP等)的崛起,人工智能进入了一个新的范式:预训练-微调(Pre-train, Fine-tune)。这些大模型在海量数据上学习到了通用的、强大的表示能力和世界知识。然而,要将这些通用模型应用于特定的下游任务或领域,通常还需要进行微调…

OpenCv高阶(十六)——Fisherface人脸识别

文章目录 前言一、Fisherface人脸识别原理1. 核心思想:LDA与Fisher准则2. 实现步骤(1) 数据预处理(2) 计算类内散布矩阵 SW对每个类别(每个人)计算均值向量 μi:(3) 计算类间散布矩阵 SB(4) 求解投影矩阵 W(5) 降维与分类 3. Fish…

二分算法的补充说明

在上一节中我们简单介绍了二分算法,通过区分小于等于,大于或者小于,大于等于我们可以求出它们的边界值。 具体方法是先看一下要求哪里的边界值,分成两部分让如果求小于等于的右边界,我们根据条件让rightmid-1,leftmid…