browser-use 的简单使用

1、browser-use是什么

Browser Use 是一个基于 Python 开发的开源库,它将先进的 AI 技术与浏览器自动化功能深度融合。通过集成Playwright等浏览器自动化工具,Browser Use允许开发者使用任何支持LangChain的大型语言模型(如GPT-4、Claude、DeepSeek等)来自动化浏览网页、提取信息、模拟用户操作等。

官网:Browser Use - Make websites accessible to AI agents

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

2、使用教程

1、把项目clone下来

git   clone  https://github.com/browser-use/browser-use.git

2. 新建虚拟环境(python >=3.11.3)

conda  create  -n   browser-use  python=3.12

conda activate  browser-use

3、进入项目,查看readme文件

安装第三方库

pip install browser-use

安装 playwright

playwright install

然后创建Agent(官方以openai为例)

from langchain_openai import ChatOpenAI
from browser_use import Agent
import asyncio

async 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 os

from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from pydantic import SecretStr

from 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())

运行结果如下: 

DeepSeek 的API获取方式如下:

网址:DeepSeek 

还可以体验界面版的:

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

注:1、运行时记得修改文件名,否则会报错

        2、原文件要获取openai-key,下面的代码是以DeepSeek为例的修改版  

        3、‘sk-xxxxxxxxx’  替换为自己的DeepSeek的api-key 即可运行

import asyncio
import os
from dataclasses import dataclass
from typing import List, Optional
from pydantic import SecretStr
import gradio as gr
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from rich.console import Console
from rich.panel import Panel
from rich.text import Text

from browser_use import Agent

load_dotenv()


@dataclass
class ActionResult:
	is_done: bool
	extracted_content: Optional[str]
	error: Optional[str]
	include_in_memory: bool


@dataclass
class AgentHistoryList:
	all_results: List[ActionResult]
	all_model_outputs: List[dict]

api_key = os.getenv('DEEPSEEK_API_KEY', 'sk-xxxxxxxxx')
def parse_agent_history(history_str: str) -> None:
	console = Console()

	# Split the content into sections based on ActionResult entries
	sections = history_str.split('ActionResult(')

	for i, section in enumerate(sections[1:], 1):  # Skip first empty section
		# Extract relevant information
		content = ''
		if 'extracted_content=' in section:
			content = section.split('extracted_content=')[1].split(',')[0].strip("'")

		if content:
			header = Text(f'Step {i}', style='bold blue')
			panel = Panel(content, title=header, border_style='blue')
			console.print(panel)
			console.print()


async def run_browser_task(
	task: str,
	model: str = 'deepseek-chat',
	headless: bool = True,
) -> str:

	agent = Agent(
		task=task,
		llm=ChatOpenAI(
			base_url='https://api.deepseek.com/v1',
			model='deepseek-chat',
			api_key=SecretStr(api_key),
		),
		use_vision=False,
	)

	result = await agent.run()
		#  TODO: The result cloud be parsed better
	return result
	


def create_ui():
	with gr.Blocks(title='Browser Use GUI') as interface:
		gr.Markdown('# Browser Use Task Automation')

		with gr.Row():
			with gr.Column():
				task = gr.Textbox(
					label='Task Description',
					placeholder='E.g., Find flights from New York to London for next week',
					lines=3,
				)
				model = gr.Dropdown(
					choices=['gpt-4', 'gpt-3.5-turbo','deepseek-chat'], label='Model', value='deepseek-chat'
				)
				headless = gr.Checkbox(label='Run Headless', value=True)
				submit_btn = gr.Button('Run Task')

			with gr.Column():
				output = gr.Textbox(label='Output', lines=10, interactive=False)

		submit_btn.click(
			fn=lambda *args: asyncio.run(run_browser_task(*args)),
			inputs=[task, model, headless],
			outputs=output,
		)

	return interface


if __name__ == '__main__':
	demo = create_ui()
	demo.launch()

结果如下:

官网示例如下: 

 

### Browser-Use 的定义 Browser-Use 是 VueUse 库的一部分,专注于提供一系列与浏览器交互的功能。这些功能涵盖了从简单的页面元素操作到复杂的浏览器特性调用等多个方面[^1]。 具体来说,Browser-Use 提供了一系列实用函数来简化开发人员与浏览器环境之间的互动过程。这不仅提高了编码效率,还增强了用户体验的一致性和响应速度。例如,在处理文件对话框、颜色模式切换或是蓝牙设备连接等方面,都能找到相应的辅助工具[^3]。 ### 使用场景举例 #### 场景一:适应用户偏好——自动切换主题 当应用程序希望根据用户的系统设置自动调整显示的主题时,可以利用 `usePreferredDark` 函数轻松实现这一目标。此函数能够实时监听并反映用户对于深色模式的选择变化,使得前端界面可以根据不同的光照条件和个人喜好灵活变换[^2]。 ```javascript import { usePreferredDark } from '@vueuse/core' const isDark = usePreferredDark() watch(isDark, (newVal) => { document.documentElement.classList[newVal ? 'add' : 'remove']('dark') }) ``` #### 场景二:增强剪贴板交互体验 为了改善网站或应用内的复制粘贴流程,`useClipboard` 可以为用户提供更加直观的操作方式。无论是简单文本还是复杂数据结构,都可以通过该组件便捷地完成读取和写入动作。 ```javascript import { useClipboard } from '@vueuse/core' const { copy, text, isSupported } = useClipboard() // 尝试将字符串 "Hello World!" 复制到剪贴板中 copy('Hello World!') console.log(text.value === 'Hello World!') // true ``` #### 场景三:优化多媒体资源加载性能 针对音频视频等大型媒体文件的高效管理需求,`useMediaQuery` 或者其他相关 API 能够帮助开发者更好地控制播放器的行为逻辑,比如自适应屏幕尺寸改变音量大小等功能。 ```javascript import { useMediaQuery } from '@vueuse/core' const prefersReducedMotion = useMediaQuery('(prefers-reduced-motion)') if (!prefersReducedMotion.value) { playAnimation() // 如果用户不倾向于减少运动,则播放动画效果 } ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值