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
  1. 新建虚拟环境(python >=3.11.3)
bash 复制代码
conda  create  -n   browser-use  python=3.12

conda activate  browser-use

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

安装第三方库

bash 复制代码
pip install browser-use

安装 playwright

bash 复制代码
playwright install

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

bash 复制代码
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

bash 复制代码
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()

结果如下:

官网示例如下:

相关推荐
静心问道7 分钟前
CPM:大规模生成式中文预训练语言模型
人工智能·语言模型·自然语言处理
Suc_zhan10 分钟前
实验二 如何将随机森林算法应用于激酶抑制剂分类任务
python·算法·随机森林·机器学习
Wwwilling14 分钟前
docker中怎么把docker中的python package转成conda,目前还没有conda
python·docker·conda
ak啊15 分钟前
Python文件/文件夹复制功能
python
ak啊15 分钟前
Python 操作 Linux 命令行
python
AI是这个时代的魔法22 分钟前
Using Dyck Path to solve a leetcode puzzle
python·算法·leetcode
__淡墨青衫__1 小时前
Django之旅:第六节--mysql数据库操作增删改查(二)
后端·python·django
无影无踪的青蛙1 小时前
[Python] 贪心算法简单版
开发语言·python·贪心算法
aiweker1 小时前
Python PDF解析利器:pdfplumber | AI应用开发
python·pdf
Fuction.1 小时前
聚类注意点
人工智能·python·机器学习·kmeans·聚类