Browser-use探索

news/2025/3/20 17:54:01/文章来源:https://www.cnblogs.com/richered/p/18783568

Browser-user:自动操作浏览器的agent

官网:https://browser-use.com/

demo:

from langchain_openai import ChatOpenAI
from browser_use import Agent
from dotenv import load_dotenv
import os
import asyncioload_dotenv()api_key = os.getenv('Silicon_Cloud_API_KEY')
base_url = os.getenv('Base_URL')
model = os.getenv('Model')llm = ChatOpenAI(model=model, api_key=api_key, base_url=base_url)async def main():agent = Agent(task="访问 https://www.baidu.com 并执行以下操作:\n""1. 等待页面完全加载\n""2. 在登录表单中输入用户名:xxxx\n""3. 输入密码:xxxx\n""4. 如果存在滑块验证,完成滑块验证\n""5. 点击登录按钮\n""6. 等待登录完成",llm=llm,use_vision=True,  # 启用视觉功能以更好地处理滑块验证)result = await agent.run()print(result)if __name__ == "__main__":asyncio.run(main())

 

结合pytest试试

conftest.py

import pytest
import os
from dotenv import load_dotenv
from utils.agent_helper import TestAgent# 加载环境变量
load_dotenv()@pytest.fixture(scope="session")
def api_config():"""
    提供API配置信息"""
    return {"api_key": os.getenv("Silicon_Cloud_API_KEY"),"base_url": os.getenv("Base_URL"),"model": os.getenv("Model")}@pytest.fixture(scope="class")
def test_agent(api_config):"""
    提供TestAgent实例"""
    print("Creating test agent with config:", api_config)  # 添加调试信息agent = TestAgent(api_key=api_config["api_key"],base_url=api_config["base_url"],model=api_config["model"])yield agent  # 使用yield而不是return,以支持清理操作@pytest.fixture(scope="session")
def test_url():"""
    提供测试URL"""
    return "https://www.baidu.com"@pytest.fixture(scope="session")
def test_credentials():"""
    提供测试账号信息"""
    return {"username": "xxxxx","password": "xxxx"} 

test_login.py

import pytest
from utils.assertions import assert_login_success, assert_element_existspytestmark = pytest.mark.asyncio@pytest.mark.usefixtures("test_agent")
class TestLogin:async def test_login_success(self, test_agent, test_url, test_credentials):"""
        测试登录功能"""
        print("Starting login test with agent:", test_agent)  # 添加调试信息# 执行登录操作result = await test_agent.login(url=test_url,username=test_credentials["username"],password=test_credentials["password"])# 验证登录结果assert_login_success(result)## # 验证登录后的页面元素dashboard_exists = await test_agent.verify_element_exists("仪表盘或管理面板")assert_element_exists(dashboard_exists, "仪表盘或管理面板")@pytest.mark.parametrize("invalid_credentials", [{"username": "wrong_user", "password": "admin"},{"username": "admin", "password": "wrong_pass"},])async def test_login_failure(self, test_agent, test_url, invalid_credentials):"""
        测试登录失败场景"""
        result = await test_agent.login(url=test_url,username=invalid_credentials["username"],password=invalid_credentials["password"])# 验证是否包含错误信息assert any(error in result for error in ["登录失败", "用户名或密码错误", "验证失败"])

agent_helper.py

from browser_use import Agent
from typing import Dict, Any, Optional
from langchain_openai import ChatOpenAIclass TestAgent:def __init__(self, api_key: str, base_url: str, model: str):"""
        初始化TestAgent:param api_key: API密钥:param base_url: API基础URL:param model: 使用的模型名称"""
        self.llm = ChatOpenAI(model=model,api_key=api_key,base_url=base_url)def _create_agent(self, task: str) -> Agent:"""
        创建一个新的Agent实例:param task: 任务描述:return: Agent实例"""
        return Agent(task=task,llm=self.llm,use_vision=True)async def execute_task(self, task: str) -> str:"""
        执行指定的任务:param task: 任务描述:return: 任务执行结果"""
        agent = self._create_agent(task)return await agent.run()async def login(self, url: str, username: str, password: str) -> str:"""
        执行登录操作:param url: 登录页面URL:param username: 用户名:param password: 密码:return: 登录结果"""
        task = (f"访问 {url} 并执行以下操作:\n"f"1. 等待页面完全加载\n"f"2. 在登录表单中输入用户名:{username}\n"f"3. 输入密码:{password}\n"f"4. 点击登录按钮\n"f"5. 等待登录完成")return await self.execute_task(task)async def verify_element_exists(self, description: str) -> bool:"""
        验证页面元素是否存在:param description: 元素描述:return: 元素是否存在"""
        task = f"验证页面上是否存在:{description}"result = await self.execute_task(task)return "找到" in result or "存在" in result

assertions.py

from typing import Anydef assert_task_success(result: str, expected_content: str):"""
    验证任务执行结果是否符合预期:param result: 实际结果:param expected_content: 预期内容"""
    assert expected_content in result, f"预期结果应包含 '{expected_content}',但实际结果为:{result}"def assert_element_exists(exists: bool, element_description: str):"""
    验证元素是否存在:param exists: 元素是否存在:param element_description: 元素描述"""
    assert exists, f"预期元素 '{element_description}' 应该存在,但未找到"def assert_login_success(result: str):"""
    验证登录是否成功:param result: 登录操作的结果"""
    success_indicators = ["登录成功", "成功登录", "已登录", "登录完成"]assert any(indicator in result for indicator in success_indicators), \f"登录应该成功,但结果为:{result}"

 

再放个配置文件.env:

Silicon_Cloud_API_KEY=
Base_URL=https://api.siliconflow.cn
Model=Qwen/Qwen2.5-72B-Instruct

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/902114.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

背离Divergence Trading ,贪小便宜

趋势交易(trend trading)和背离交易(divergence trading),代表了两种不同的交易策略。做背离交易相当于赌市场短期失效,承认你比市场聪明,虽然能赚小钱,但往往是亏大钱的根源。 贪小便宜爱背离,贪小便宜(gain small advantages)不爱止损(cut losses),所以背离和不止损…

在鸿蒙NEXT开发中实现一个语音识别组件

鸿蒙系统发布以后都不知道叫它5.0版本还是NEXT版本了,哈哈,反正是最新版本就对了。对于语音转换文字,鸿蒙系统提供了离线语音识别模型speechRecognizer,语种目前支持中文,识别效果非常不错。今天要分享的是使用speechRecognizer实现一个语音识别组件。要实现语音识别,首先…

激光代加工产品一览-代加工-外协加工-委外加工-激光代加工-河南郑州亚克力切割雕刻代加工-芯晨微纳(河南)

关键词:河南省郑州市、激光代加工、激光打标、激光切割、激光雕刻、激光打孔、激光毛化、激光分切 简介:芯晨微纳(河南)光电科技有限公司,专注于激光微纳代加工、设备/耗材代理销售、设备租赁、技术推广服务,可处理材料类型及应用范围十分广泛,欢迎来电咨询(韩经理1823…

20242801 2024-2025-2 《网络攻防实践》第4次作业

20242801 2024-2025-2 《网络攻防实践》第4次作业 一、实验内容 ​ 在虚拟机环境中完成TCP/IP协议栈重点协议的攻击实验,学习ARP缓存欺骗攻击、ICMP重定向攻击、SYN Flood攻击、TCP RST攻击、TCP会话劫持攻击的原理和相关知识,并动手进行实践。 二、实验过程 (一)ARP缓存欺…

缓存监控治理在游戏业务的实践和探索

通过对 Redis 和 Caffeine 的缓存监控快速发现和定位问题降低故障的影响面。作者:来自 vivo 互联网服务器团队- Wang Zhi 通过对 Redis 和 Caffeine 的缓存监控快速发现和定位问题降低故障的影响面。 一、缓存监控的背景游戏业务中存在大量的高频请求尤其是对热门游戏而言,而…

从零开始驯服Linux(一):ZYNQ-Linux启动文件构建全解析

从零开始驯服Linux(一):ZYNQ-Linux启动文件构建全解析 ZYNQ系列芯片集成了ARM处理器和FPGA(可编程逻辑单元),正是因为由于ARM处理器的存在,所以我们可以在ZYNQ系列芯片上面运行Linux系统。 在ZYNQ系列芯片上运行Linux会给我们带来很多优势:首先,我们可以将部分逻辑处理…

# 20241902 2024-2025-2 《网络攻防实践》第六周作业

1.实验内容 通过本周的学习和实践,学习使用metasploitable对windows进行远程的渗透测试实验;学习利用wireshark进行日志文件的分析和攻击取证,解读攻击者所利用的攻击、攻击者的具体操作以及如何对攻击行为进行防范;实践同一内网中对利用metasploitable对其他windows系统进…

gitlab+jenkins+harbor+k8s安装操作流程之rancher

关闭防火墙 systemctl stop firewalld yum安装依赖 yum install -y yum-utils device-mapper-persistent-data lvm2 下载docker-ce.repo源 wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo 安装docker yum install…

win11优化pyenv-venv虚拟环境切换

问题 使用 pyenv-venv activate env_name 命令激活虚拟环境后无法使用tab自动完善命令无法上下键切换历史命令脚本 #!/usr/bin/bashvenvs="/d/JavaProgramFiles/pyenv-win/pyenv-win-venv/envs" # #!/bin/bashactivate () {# 设置 PATHORIGIN_PATH="${ORIGIN_P…

安装Harbor

环境:OS:Centos 7说明:需要docker和 docker compose[root@node1 data]# docker version Client: Docker Engine - CommunityVersion: 26.1.4API version: 1.45Go version: go1.21.11Git commit: 5650f9bBuilt: Wed Jun 5 11:32:04…

Linux学习路线

Linux 学习路线Linux 学习路线 by 程序员鱼皮💂 + 💻 = 👴🏽 建议先观看视频入门:https://www.bilibili.com/video/BV1ev411G7VE/ 为什么学 Linux? 相比于 Windows,Linux 免费、开源、安全、灵活、稳定、便于开发,所以更受企业青睐,甚至 90% 以上 的企业应用都是用…

【无问AI网络安全大模型】协助渗透测试挖掘sql注入

在日常工作中发现了一个登录框,话不多说,搞搞看看存不存在SQL注入。输入用户名密码开始抓包,可以看出用户名密码都进行了加密这个时候输入单引号,发现页面报错。 输入双引号,页面恢复正常这个时候,可以判断这个系统存在注入的可能非常大, 手工使用了报错注入、盲注都不行…