browser-use:AI 驱动的浏览器自动化神器——DOM识别与交互详解

boyanx5个月前技术教程26

browser-use 可以识别网页中可交互DOM内容,并能与之进行交互。本文将详细介绍 browser-use 实现这一核心功能的技术细节。


一、可交互元素识别

browser-use 是通过 DOMService 来进行 DOM 元素的识别与交到。DOMService 主要作用如下:

  • 解析和处理页面的 DOM 结构
  • 提供元素定位和交互能力
  • 维护元素状态和历史记录

DOMService 通过以下的条件来判断某一个DOM元素是否可交互:

// 详细可以看 buildDomTree.js
const isInteractiveElement = 
    hasAriaProps ||
    hasClickHandler ||
    hasClickListeners ||
    isDraggable ||
    isContentEditable

最新合入的代码里也可通过判断 element 和 cursor 是否是可交互属性, 如 pointer、cell、grab 等。


二、元素编号与描述

  • 可交互元素会被分配唯一的编号,会将元素描述和编号一起发给 LLM
  • 结构: [索引]<标签名 属性值1;属性值2>文本内容/>
[1]<button 登录按钮;btn-primary>登录/>
[2]<input 请输入用户名;text;username/>

三、元素定位机制

  1. 元素映射

browser-use 内部维护着一个 selector_map 映射, 将元素索引映射到元素信息

SelectorMap = dict[int, DOMElementNode]
  1. 元素定位

当要点击索引为 1 的元素的时候,会执行以下步骤:

@self.registry.action('Click element', param_model=ClickElementAction)
	def click_element():
		# 1. 获取 index 对应的 element node
		element_node = await browser.get_dom_element_by_index(params.index)

	  # 2. 点击元素
		await browser._click_element_node(element_node)
  1. 元素交互

_click_element_node 过程中,会优先看 element_node 能不能解析出 css_selector, 如果不可以,再使用 xpath (xptah 是构建 dom 树的时候生成)。


四、视觉辅助

当启动 use_vision 时,Agent 会将当前页面截图一起发给 LLM。

标签: tree.js

相关文章

Tree Shaking 原理:如何让 JavaScript 包体积减少高达50%?

JavaScript 包体积是一个持续受到关注的问题,巨大的 JS 文件会导致更长的加载时间、更高的解析和执行成本,最终影响用户体验。幸运的是,我们有像 Tree Shaking 这样的技术来帮助我们...

来了!JavaScript 最强大的 8 个 DOM API

作为前端开发者,我们每天都在操作 DOM,但 DOM API 中隐藏着许多鲜为人知却极其实用的方法。本文将介绍一些「冷门但能显著提升开发效率」的DOM操作技巧。1. Element.checkVisi...

搞懂JS模块各个写法(搞懂js模块各个写法是什么)

搞懂 Commonjs、AMD、CMD、UMD、ES Modules先说Rollup是什么?是一个打包的ES Module的工具;Rollup 是一个 JavaScript 模块打包器,可以将小块代码...

Vue3远程加载组件(vue引入外部组件)

一、Vite是什么?首先,讲下Vite名字的由来,Vite实际上是法语中快的意思,所以顾名思义,这个工具就是为了给我们带来更快的开发体验,它是一个面向现代浏览器,基于ECMA标准的ES Module实...

我的世界手机版JS资源下载(我的世界手机版资源下载软件)

我的世界手机版JS资源下载攻略带给玩家,希望对玩家们有帮助,看看我的世界手机版JS资源下载攻略。首先我们来了解一下我的世界这个游戏中什么是JS。我的世界手机版js详解:我的世界手机版js详解,手机js...

从 “卡顿” 到 “秒开”:外投首屏性能优化的实战锦囊|得物技术

一、背景在互联网时代,网站性能的好坏直接影响用户体验和转化率。对投放的广告页面而言,如何在保证视觉效果和功能的同时提升加载速度,成为了开发者必须面对的挑战。本文将探讨几种有效的外投页面性能优化策略,包...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。