使用 browser-user 开源项目实现自动化获取最新 10 条新闻使用手册
一、项目简介
browser-user 是一个可用于通过发送文本指令来自动化执行浏览器操作的开源项目。借助它,我们能够按照预设的文本指令,让程序自动打开网页、定位元素并提取所需信息,例如获取最新的 10 条新闻。
二、环境准备
2.1 操作系统
本项目支持多种主流操作系统,如 Linux(Ubuntu 等)、Windows、macOS。
2.2 软件依赖
- Python:版本 3.7 及以上。你可以通过以下命令检查 Python 版本:
python --version
若未安装 Python 或版本不符合要求,可从 Python 官方网站 下载并安装。
- 浏览器:建议安装 Chrome 浏览器,后续配置时需要用到其路径。
三、安装部署 browser-user
3.1 克隆项目仓库
打开终端,执行以下命令克隆 browser-user 项目到本地:
git clone <browser-user 项目的 GitHub 仓库地址>
cd <项目目录名>
3.2 创建并激活虚拟环境(可选但推荐)
为了避免项目依赖与系统全局 Python 环境冲突,建议创建并激活虚拟环境:
# 创建虚拟环境
python -m venv venv
# 激活虚拟环境(Linux/macOS)
source venv/bin/activate
# 激活虚拟环境(Windows)
.\venv\Scripts\activate
3.3 安装项目依赖
在激活虚拟环境后,使用以下命令安装项目所需的依赖:
pip install -r requirements.txt
3.4 安装浏览器驱动
项目使用 Playwright 进行浏览器自动化操作,需要安装相应的浏览器驱动。执行以下命令安装 Chrome 浏览器驱动:
playwright install chrome
四、配置项目
4.1 配置环境变量
在项目根目录下创建一个 .env
文件,用于存储必要的环境变量。以下是一个示例:
# Chrome 浏览器路径(根据实际情况修改)
CHROME_PATH="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
DEEPSEEK_API_KEY=替换成自己的KEY
ANONYMIZED_TELEMETRY=False
4.2 加载环境变量
在项目代码中加载 .env
文件中的环境变量,可使用 python-dotenv
库。在主脚本文件开头添加以下代码:
from dotenv import load_dotenv
import os
load_dotenv()
chrome_path = os.getenv('CHROME_PATH')
五、编写 Agent 代码
5.1 整体思路
我们的目标是编写一个 Agent 代码,让它能够按照我们的文本指令,打开新闻网站,定位新闻列表元素,提取前 10 条新闻的标题和链接,并将结果保存到本地文件。
5.2 示例代码
以下是一个完整的 Python 代码示例your_agent_code.py:
import asyncio
import os
import logging
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from pydantic import SecretStr
from browser_use import Agent
# 配置日志记录
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
# 禁用匿名遥测
os.environ["ANONYMIZED_TELEMETRY"] = "false"
# 加载环境变量
load_dotenv()
def get_api_key():
"""获取 API 密钥,如果未设置则抛出异常"""
api_key = os.getenv('DEEPSEEK_API_KEY', '')
if not api_key:
logger.error('DEEPSEEK_API_KEY is not set')
raise ValueError('DEEPSEEK_API_KEY is not set')
return api_key
def create_agent():
"""创建 Agent 实例"""
api_key = get_api_key()
task = '访问www.baidu.com,收集当前最热的十个话题,输出到本目录下result文件中,并保存到本'
llm = ChatOpenAI(
base_url='https://api.deepseek.com/v1',
model='deepseek-reasoner',
api_key=SecretStr(api_key),
)
agent = Agent(
task=task,
llm=llm,
use_vision=False,
max_failures=2,
max_actions_per_step=1,
)
return agent
async def run_search():
"""运行搜索任务"""
try:
agent = create_agent()
logger.info('Starting the search task...')
await agent.run()
logger.info('Search task completed successfully.')
except Exception as e:
logger.error(f'An error occurred during the search task: {e}', exc_info=True)
if __name__ == '__main__':
asyncio.run(run_search())
六、运行代码
在终端中,确保虚拟环境已激活,然后执行以下命令运行代码:
python your_agent_code.py # 将 your_agent_code.py 替换为你保存上述代码的文件名
七、常见问题及解决方法
7.1 浏览器启动失败
- 原因:Chrome 浏览器路径配置错误或浏览器未安装。
- 解决方法:检查
.env
文件中的CHROME_PATH
是否正确,确保 Chrome 浏览器已正确安装。
7.2 元素定位失败
- 原因:新闻网站的 HTML 结构发生变化,导致选择器无法匹配到相应元素。
- 解决方法:使用浏览器的开发者工具(如 Chrome 的开发者工具)检查网页结构,更新选择器。
7.3 网络请求超时
- 原因:网络不稳定或网站响应缓慢。
- 解决方法:检查网络连接,或在代码中增加等待时间,如
await page.wait_for_selector('.news-item', timeout=10000)
。
八、扩展功能建议
- 支持更多新闻网站:修改代码中的
page.goto()
函数的参数,切换到不同的新闻网站。 - 数据存储优化:将新闻数据保存到数据库(如 MySQL、MongoDB)中,方便后续查询和分析。
- 定时任务:使用
schedule
库或系统的定时任务工具(如 Linux 的cron
),定期获取最新新闻。