本文档整理了 browser-use 项目的所有底层工具方法,方便你在自己的 Agent 中集成使用。
文件位置: browser_use/browser/session.py
async start() -> None功能: 启动浏览器会话
browser_session = BrowserSession(headless=False)
await browser_session.start()
async stop() -> None功能: 优雅停止浏览器会话
async kill() -> None功能: 强制终止浏览器会话
async reset() -> None功能: 重置会话状态
async get_or_create_cdp_session(target_id: str, focus: bool = True) -> CDPSession功能: 获取或创建 CDP 会话
target_id: 目标页面/标签的 IDfocus: 是否将焦点切换到该目标async get_current_page_url() -> str功能: 获取当前页面 URL
async get_selector_map() -> dict[int, EnhancedDOMTreeNode]功能: 获取页面元素索引映射
async get_element_by_index(index: int) -> EnhancedDOMTreeNode | None功能: 通过索引获取页面元素
index - 元素索引号文件位置: browser_use/tools/service.py
这是最核心的工具类,包含了所有高级浏览器操作方法。
async search(query: str, engine: str = 'google') -> ActionResult功能: 使用搜索引擎搜索
query: 搜索关键词engine: 搜索引擎 ('google', 'duckduckgo', 'bing')browser_use/tools/service.py:126result = await tools.search(
query="Python async programming",
engine="google",
browser_session=browser_session
)
async navigate(url: str, new_tab: bool = False) -> ActionResult功能: 导航到指定 URL
url: 目标 URLnew_tab: 是否在新标签页打开browser_use/tools/service.py:169result = await tools.navigate(
url="https://example.com",
new_tab=True,
browser_session=browser_session
)
async go_back() -> ActionResult功能: 返回上一页
browser_use/tools/service.py:213async wait(seconds: int = 3) -> ActionResult功能: 等待指定秒数
seconds - 等待时间(最大 30 秒)browser_use/tools/service.py:227async click(index: int, coordinate_x: int = None, coordinate_y: int = None) -> ActionResult功能: 点击页面元素
index: 元素索引(优先使用)coordinate_x, coordinate_y: 坐标点击(备选)browser_use/tools/service.py:299 (索引), browser_use/tools/service.py:258 (坐标)# 通过索引点击
result = await tools.click(
index=5,
browser_session=browser_session
)
# 通过坐标点击(需要启用坐标点击功能)
result = await tools.click(
coordinate_x=100,
coordinate_y=200,
browser_session=browser_session
)
async input(index: int, text: str, clear: bool = True) -> ActionResult功能: 在输入框中输入文本
index: 输入框元素索引text: 要输入的文本clear: 是否先清空输入框browser_use/tools/service.py:369result = await tools.input(
index=3,
text="user@example.com",
clear=True,
browser_session=browser_session
)
async upload_file(index: int, path: str) -> ActionResult功能: 上传文件到文件输入框
index: 文件输入框索引path: 文件路径browser_use/tools/service.py:438result = await tools.upload_file(
index=7,
path="/path/to/file.pdf",
browser_session=browser_session,
available_file_paths=["/path/to/file.pdf"],
file_system=file_system
)
async scroll(down: bool = True, pages: float = 1.0, index: int = None) -> ActionResult功能: 滚动页面或元素
down: True 向下滚动,False 向上滚动pages: 滚动页数(0.5-10.0)index: 可选,滚动特定元素(如下拉框)browser_use/tools/service.py:789# 向下滚动 2 页
result = await tools.scroll(
down=True,
pages=2.0,
browser_session=browser_session
)
# 滚动特定元素
result = await tools.scroll(
down=True,
pages=1.0,
index=10,
browser_session=browser_session
)
async find_text(text: str) -> ActionResult功能: 查找并滚动到文本位置
text - 要查找的文本browser_use/tools/service.py:910async screenshot() -> ActionResult功能: 请求在下次观察中包含截图
browser_use/tools/service.py:934async switch(tab_id: str) -> ActionResult功能: 切换到指定标签页
tab_id - 标签页 ID(target_id 的最后 4 位)browser_use/tools/service.py:605result = await tools.switch(
tab_id="a3f2",
browser_session=browser_session
)
async close(tab_id: str) -> ActionResult功能: 关闭指定标签页
tab_id - 标签页 IDbrowser_use/tools/service.py:630async dropdown_options(index: int) -> ActionResult功能: 获取下拉框的所有选项
index - 下拉框元素索引browser_use/tools/service.py:952result = await tools.dropdown_options(
index=8,
browser_session=browser_session
)
async select_dropdown(index: int, text: str) -> ActionResult功能: 选择下拉框选项
index: 下拉框索引text: 要选择的选项文本browser_use/tools/service.py:980async extract(query: str, extract_links: bool = False, start_from_char: int = 0) -> ActionResult功能: 使用 LLM 从页面提取结构化数据
query: 提取查询(告诉 LLM 要提取什么)extract_links: 是否提取链接start_from_char: 从哪个字符开始(用于分页提取)browser_use/tools/service.py:659result = await tools.extract(
query="提取页面上所有产品的名称和价格",
extract_links=True,
browser_session=browser_session,
page_extraction_llm=llm,
file_system=file_system
)
async evaluate(code: str) -> ActionResult功能: 在页面中执行 JavaScript 代码
code - JavaScript 代码字符串browser_use/tools/service.py:1098result = await tools.evaluate(
code="""
(function(){
try {
const title = document.querySelector('h1');
return title ? title.textContent : 'not found';
} catch(e) {
return 'Error: ' + e.message;
}
})()
""",
browser_session=browser_session
)
async send_keys(keys: list[str]) -> ActionResult功能: 发送键盘按键序列
keys - 按键列表(如 ['Control', 'a'])browser_use/tools/service.py:894result = await tools.send_keys(
keys=['Control', 'a'],
browser_session=browser_session
)
async write_file(file_name: str, content: str, append: bool = False) -> ActionResult功能: 写入文件到本地文件系统
file_name: 文件名content: 文件内容append: 是否追加模式browser_use/tools/service.py:1026result = await tools.write_file(
file_name="output.txt",
content="Hello World",
append=False,
file_system=file_system
)
async read_file(file_name: str) -> ActionResult功能: 读取文件内容
file_name - 文件名browser_use/tools/service.py:1060async replace_file(file_name: str, old_str: str, new_str: str) -> ActionResult功能: 替换文件中的特定文本
file_name: 文件名old_str: 要替换的文本new_str: 新文本browser_use/tools/service.py:1052async done(text: str, success: bool = True, files_to_display: list[str] = None) -> ActionResult功能: 标记任务完成
text: 完成消息success: 是否成功files_to_display: 要显示的文件列表is_done=True 的结果browser_use/tools/service.py:1295文件位置: browser_use/dom/service.py
async get_all_trees(target_id: str) -> TargetAllTrees功能: 获取页面的所有 DOM 树
target_id - 目标页面 IDbrowser_use/dom/service.py:248is_element_visible_according_to_all_parents(node: EnhancedDOMTreeNode, html_frames: list) -> bool功能: 检查元素在所有父框架中是否可见
node: DOM 节点html_frames: HTML 框架列表browser_use/dom/service.py:125文件位置: browser_use/actor/page.py
Page 类提供了对单个页面/标签的直接操作接口。
async evaluate(page_function: str, *args) -> str功能: 在页面中执行 JavaScript 函数
page_function: 必须是箭头函数格式 (...args) => {...}*args: 传递给函数的参数browser_use/actor/page.py:103page = Page(browser_session, target_id)
result = await page.evaluate(
"() => document.title"
)
async screenshot(format: str = 'png', quality: int = None) -> str功能: 截取页面截图
format: 图片格式 ('png', 'jpeg', 'webp')quality: JPEG 质量 (0-100)browser_use/actor/page.py:192async press(key: str) -> None功能: 按下键盘按键
key - 按键名称或组合键(如 "Enter", "Control+A")browser_use/actor/page.py:213await page.press("Enter")
await page.press("Control+A")
async reload() -> None功能: 重新加载页面
browser_use/actor/page.py:90async set_viewport_size(width: int, height: int) -> None功能: 设置视口大小
width: 宽度(像素)height: 高度(像素)browser_use/actor/page.py:279async get_element(backend_node_id: int) -> Element功能: 通过后端节点 ID 获取元素对象
backend_node_id - 元素的后端节点 IDbrowser_use/actor/page.py:95@property async mouse -> Mouse功能: 获取鼠标操作接口
browser_use/actor/page.py:81文件位置: browser_use/actor/mouse.py
async click(x: int, y: int, button: str = 'left', click_count: int = 1) -> None功能: 在指定坐标点击
x, y: 坐标位置button: 鼠标按钮 ('left', 'right', 'middle')click_count: 点击次数(双击用 2)browser_use/actor/mouse.py:21mouse = await page.mouse
await mouse.click(100, 200, button='left', click_count=1)
async move(x: int, y: int, steps: int = 1) -> None功能: 移动鼠标到指定坐标
x, y: 目标坐标steps: 移动步数(预留参数)browser_use/actor/mouse.py:77async down(button: str = 'left', click_count: int = 1) -> None功能: 按下鼠标按钮
button: 鼠标按钮click_count: 点击计数browser_use/actor/mouse.py:49async up(button: str = 'left', click_count: int = 1) -> None功能: 释放鼠标按钮
down()browser_use/actor/mouse.py:63async scroll(x: int = 0, y: int = 0, delta_x: int = None, delta_y: int = None) -> None功能: 滚动页面
x, y: 滚动起始坐标(默认视口中心)delta_x, delta_y: 滚动距离(正数向下/右)browser_use/actor/mouse.py:85# 向下滚动 500 像素
await mouse.scroll(delta_y=500)
文件位置: browser_use/actor/element.py
async click(button: str = 'left', click_count: int = 1, modifiers: list[str] = None) -> None功能: 点击元素
button: 鼠标按钮click_count: 点击次数modifiers: 修饰键列表 (['Alt', 'Control', 'Meta', 'Shift'])browser_use/actor/element.py:93element = await page.get_element(backend_node_id)
await element.click(button='left', click_count=1)
from browser_use import BrowserSession
from browser_use.tools.service import Tools
from browser_use.llm.base import BaseChatModel
# 1. 初始化浏览器会话
browser_session = BrowserSession(
headless=False,
user_data_dir="./profile"
)
# 2. 启动浏览器
await browser_session.start()
# 3. 初始化工具
tools = Tools()
# 4. 导航到网页
await tools.navigate(
url="https://example.com",
browser_session=browser_session
)
# 5. 等待页面加载
await tools.wait(seconds=2)
# 6. 获取页面元素
selector_map = await browser_session.get_selector_map()
# 7. 点击元素
await tools.click(
index=5,
browser_session=browser_session
)
# 8. 输入文本
await tools.input(
index=3,
text="search query",
browser_session=browser_session
)
# 9. 滚动页面
await tools.scroll(
down=True,
pages=2.0,
browser_session=browser_session
)
# 10. 提取数据
result = await tools.extract(
query="提取所有产品信息",
browser_session=browser_session,
page_extraction_llm=your_llm
)
# 11. 清理
await browser_session.stop()
class MyAgent:
def __init__(self):
self.browser_session = BrowserSession(headless=False)
self.tools = Tools()
async def start(self):
await self.browser_session.start()
async def navigate_and_extract(self, url: str, query: str):
# 导航
await self.tools.navigate(
url=url,
browser_session=self.browser_session
)
# 等待加载
await self.tools.wait(seconds=2)
# 提取数据
result = await self.tools.extract(
query=query,
browser_session=self.browser_session,
page_extraction_llm=self.llm
)
return result.extracted_content
async def cleanup(self):
await self.browser_session.stop()
所有工具方法返回的结果对象,包含:
extracted_content: 提取的内容(短期记忆)long_term_memory: 长期记忆摘要error: 错误信息is_done: 是否完成任务success: 是否成功metadata: 元数据(如点击坐标)attachments: 附件文件路径列表增强的 DOM 节点对象,包含:
node_id: 节点 IDnode_name: 节点名称(如 'DIV', 'INPUT')node_type: 节点类型attributes: 属性字典absolute_position: 绝对位置snapshot_node: 快照信息(样式、边界框等)children_nodes: 子节点列表parent_node: 父节点引用CDP 会话对象,用于发送 CDP 命令:
cdp_client: CDP 客户端target_id: 目标 IDsession_id: 会话 IDawaitbrowser_session.start()stop() 或 kill()tools.set_coordinate_clicking(True) 启用available_file_paths 中声明路径browser_use/browser/events.pybrowser_use/browser/watchdog_base.py文档版本: 1.0 最后更新: 2026-01-28 适用版本: browser-use >= 0.1.0