Files
codex-bot a64378956a
Some checks failed
Pre-commit / run (ubuntu-latest) (push) Has been cancelled
Deploy Sphinx documentation to Pages / build_en (ubuntu-latest, 3.10) (push) Has been cancelled
Deploy Sphinx documentation to Pages / build_zh (ubuntu-latest, 3.10) (push) Has been cancelled
Python Unittest Coverage / test (macos-15, 3.10) (push) Has been cancelled
Python Unittest Coverage / test (macos-15, 3.11) (push) Has been cancelled
Python Unittest Coverage / test (macos-15, 3.12) (push) Has been cancelled
Python Unittest Coverage / test (ubuntu-latest, 3.10) (push) Has been cancelled
Python Unittest Coverage / test (ubuntu-latest, 3.11) (push) Has been cancelled
Python Unittest Coverage / test (ubuntu-latest, 3.12) (push) Has been cancelled
Python Unittest Coverage / test (windows-latest, 3.10) (push) Has been cancelled
Python Unittest Coverage / test (windows-latest, 3.11) (push) Has been cancelled
Python Unittest Coverage / test (windows-latest, 3.12) (push) Has been cancelled
chore: initialize sandbox and overwrite remote content
2026-03-02 22:32:27 +08:00

139 lines
4.1 KiB
Python

# -*- coding: utf-8 -*-
# pylint: disable=too-many-lines
"""The main entry point of the browser agent example."""
import asyncio
import os
import sys
import argparse
import traceback
from pydantic import BaseModel, Field
from browser_agent import BrowserAgent
from agentscope.formatter import DashScopeChatFormatter
from agentscope.memory import InMemoryMemory
from agentscope.model import DashScopeChatModel
from agentscope.tool import Toolkit
from agentscope.mcp import StdIOStatefulClient
from agentscope.agent import UserAgent
class FinalResult(BaseModel):
"""A structured result model for structured output."""
result: str = Field(
description="The final result to the initial user query",
)
async def main(
start_url_param: str = "https://www.google.com",
max_iters_param: int = 50,
) -> None:
"""The main entry point for the browser agent example."""
# Setup toolkit with browser tools from MCP server
toolkit = Toolkit()
browser_client = StdIOStatefulClient(
name="playwright-mcp",
command="npx",
args=["@playwright/mcp@latest"],
)
try:
# Connect to the browser client
await browser_client.connect()
await toolkit.register_mcp_client(browser_client)
agent = BrowserAgent(
name="Browser-Use Agent",
model=DashScopeChatModel(
api_key=os.environ.get("DASHSCOPE_API_KEY"),
model_name="qwen3-max",
stream=False,
),
formatter=DashScopeChatFormatter(),
memory=InMemoryMemory(),
toolkit=toolkit,
max_iters=max_iters_param,
start_url=start_url_param,
)
user = UserAgent("User")
msg = None
while True:
msg = await user(msg)
if msg.get_text_content() == "exit":
break
msg = await agent(msg, structured_model=FinalResult)
await agent.memory.clear()
except Exception as e:
traceback.print_exc()
print(f"An error occurred: {e}")
print("Cleaning up browser client...")
finally:
# Ensure browser client is always closed,
# regardless of success or failure
try:
await browser_client.close()
print("Browser client closed successfully.")
except Exception as cleanup_error:
print(f"Error while closing browser client: {cleanup_error}")
def parse_arguments() -> argparse.Namespace:
"""Parse command line arguments."""
parser = argparse.ArgumentParser(
description="Browser Agent Example with configurable reply method",
)
parser.add_argument(
"--start-url",
type=str,
default="https://www.google.com",
help=(
"Starting URL for the browser agent "
"(default: https://www.google.com)"
),
)
parser.add_argument(
"--max-iters",
type=int,
default=50,
help="Maximum number of iterations (default: 50)",
)
return parser.parse_args()
if __name__ == "__main__":
print("Starting Browser Agent Example...")
print(
"The browser agent will use "
"playwright-mcp (https://github.com/microsoft/playwright-mcp)."
"Make sure the MCP server is installed "
"by `npx @playwright/mcp@latest`",
)
print("\nUsage examples:")
print(" python main.py # Start with defaults")
print(" python main.py --start-url https://example.com --max-iters 100")
print(" python main.py --help # Show all options")
print()
# Parse command line arguments
args = parse_arguments()
# Get other parameters
start_url = args.start_url
max_iters = args.max_iters
# Validate parameters
if max_iters <= 0:
print("Error: max-iters must be positive")
sys.exit(1)
if not start_url.startswith(("http://", "https://")):
print("Error: start-url must be a valid HTTP/HTTPS URL")
sys.exit(1)
print(f"Starting URL: {start_url}")
print(f"Maximum iterations: {max_iters}")
asyncio.run(main(start_url, max_iters))