aroniscunt/Browser_Web_UI_Automation
0
1import pdb
2
3from dotenv import load_dotenv
4
5load_dotenv()
6import sys
7
8sys.path.append(".")
9import asyncio
10import os
11import sys
12from pprint import pprint
13
14from browser_use import Agent
15from browser_use.agent.views import AgentHistoryList
16
17from src.utils import utils
18
19
20async def test_browser_use_agent():
21 from browser_use.browser.browser import Browser, BrowserConfig
22 from browser_use.browser.context import (
23 BrowserContextConfig
24 )
25 from browser_use.agent.service import Agent
26
27 from src.browser.custom_browser import CustomBrowser
28 from src.controller.custom_controller import CustomController
29 from src.utils import llm_provider
30 from src.agent.browser_use.browser_use_agent import BrowserUseAgent
31
32 llm = llm_provider.get_llm_model(
33 provider="openai",
34 model_name="gpt-4o",
35 temperature=0.8,
36 )
37
38 # llm = llm_provider.get_llm_model(
39 # provider="google",
40 # model_name="gemini-2.0-flash",
41 # temperature=0.6,
42 # api_key=os.getenv("GOOGLE_API_KEY", "")
43 # )
44
45 # llm = utils.get_llm_model(
46 # provider="deepseek",
47 # model_name="deepseek-reasoner",
48 # temperature=0.8
49 # )
50
51 # llm = utils.get_llm_model(
52 # provider="deepseek",
53 # model_name="deepseek-chat",
54 # temperature=0.8
55 # )
56
57 # llm = utils.get_llm_model(
58 # provider="ollama", model_name="qwen2.5:7b", temperature=0.5
59 # )
60
61 # llm = utils.get_llm_model(
62 # provider="ollama", model_name="deepseek-r1:14b", temperature=0.5
63 # )
64
65 window_w, window_h = 1280, 1100
66
67 # llm = llm_provider.get_llm_model(
68 # provider="azure_openai",
69 # model_name="gpt-4o",
70 # temperature=0.5,
71 # base_url=os.getenv("AZURE_OPENAI_ENDPOINT", ""),
72 # api_key=os.getenv("AZURE_OPENAI_API_KEY", ""),
73 # )
74
75 mcp_server_config = {
76 "mcpServers": {
77 # "markitdown": {
78 # "command": "docker",
79 # "args": [
80 # "run",
81 # "--rm",
82 # "-i",
83 # "markitdown-mcp:latest"
84 # ]
85 # },
86 "desktop-commander": {
87 "command": "npx",
88 "args": [
89 "-y",
90 "@wonderwhy-er/desktop-commander"
91 ]
92 },
93 }
94 }
95 controller = CustomController()
96 await controller.setup_mcp_client(mcp_server_config)
97 use_own_browser = True
98 use_vision = True # Set to False when using DeepSeek
99
100 max_actions_per_step = 10
101 browser = None
102 browser_context = None
103
104 try:
105 extra_browser_args = []
106 if use_own_browser:
107 browser_binary_path = os.getenv("BROWSER_PATH", None)
108 if browser_binary_path == "":
109 browser_binary_path = None
110 browser_user_data = os.getenv("BROWSER_USER_DATA", None)
111 if browser_user_data:
112 extra_browser_args += [f"--user-data-dir={browser_user_data}"]
113 else:
114 browser_binary_path = None
115 browser = CustomBrowser(
116 config=BrowserConfig(
117 headless=False,
118 browser_binary_path=browser_binary_path,
119 extra_browser_args=extra_browser_args,
120 new_context_config=BrowserContextConfig(
121 window_width=window_w,
122 window_height=window_h,
123 )
124 )
125 )
126 browser_context = await browser.new_context(
127 config=BrowserContextConfig(
128 trace_path=None,
129 save_recording_path=None,
130 save_downloads_path="./tmp/downloads",
131 window_height=window_h,
132 window_width=window_w,
133 )
134 )
135 agent = BrowserUseAgent(
136 # task="download pdf from https://arxiv.org/pdf/2311.16498 and rename this pdf to 'mcp-test.pdf'",
137 task="give me nvidia stock price",
138 llm=llm,
139 browser=browser,
140 browser_context=browser_context,
141 controller=controller,
142 use_vision=use_vision,
143 max_actions_per_step=max_actions_per_step,
144 generate_gif=True
145 )
146 history: AgentHistoryList = await agent.run(max_steps=100)
147
148 print("Final Result:")
149 pprint(history.final_result(), indent=4)
150
151 print("\nErrors:")
152 pprint(history.errors(), indent=4)
153
154 except Exception:
155 import traceback
156 traceback.print_exc()
157 finally:
158 if browser_context:
159 await browser_context.close()
160 if browser:
161 await browser.close()
162 if controller:
163 await controller.close_mcp_client()
164
165
166async def test_browser_use_parallel():
167 from browser_use.browser.browser import Browser, BrowserConfig
168 from browser_use.browser.context import (
169 BrowserContextConfig,
170 )
171 from browser_use.agent.service import Agent
172
173 from src.browser.custom_browser import CustomBrowser
174 from src.controller.custom_controller import CustomController
175 from src.utils import llm_provider
176 from src.agent.browser_use.browser_use_agent import BrowserUseAgent
177
178 # llm = utils.get_llm_model(
179 # provider="openai",
180 # model_name="gpt-4o",
181 # temperature=0.8,
182 # base_url=os.getenv("OPENAI_ENDPOINT", ""),
183 # api_key=os.getenv("OPENAI_API_KEY", ""),
184 # )
185
186 # llm = utils.get_llm_model(
187 # provider="google",
188 # model_name="gemini-2.0-flash",
189 # temperature=0.6,
190 # api_key=os.getenv("GOOGLE_API_KEY", "")
191 # )
192
193 # llm = utils.get_llm_model(
194 # provider="deepseek",
195 # model_name="deepseek-reasoner",
196 # temperature=0.8
197 # )
198
199 # llm = utils.get_llm_model(
200 # provider="deepseek",
201 # model_name="deepseek-chat",
202 # temperature=0.8
203 # )
204
205 # llm = utils.get_llm_model(
206 # provider="ollama", model_name="qwen2.5:7b", temperature=0.5
207 # )
208
209 # llm = utils.get_llm_model(
210 # provider="ollama", model_name="deepseek-r1:14b", temperature=0.5
211 # )
212
213 window_w, window_h = 1280, 1100
214
215 llm = llm_provider.get_llm_model(
216 provider="azure_openai",
217 model_name="gpt-4o",
218 temperature=0.5,
219 base_url=os.getenv("AZURE_OPENAI_ENDPOINT", ""),
220 api_key=os.getenv("AZURE_OPENAI_API_KEY", ""),
221 )
222
223 mcp_server_config = {
224 "mcpServers": {
225 # "markitdown": {
226 # "command": "docker",
227 # "args": [
228 # "run",
229 # "--rm",
230 # "-i",
231 # "markitdown-mcp:latest"
232 # ]
233 # },
234 "desktop-commander": {
235 "command": "npx",
236 "args": [
237 "-y",
238 "@wonderwhy-er/desktop-commander"
239 ]
240 },
241 # "filesystem": {
242 # "command": "npx",
243 # "args": [
244 # "-y",
245 # "@modelcontextprotocol/server-filesystem",
246 # "/Users/xxx/ai_workspace",
247 # ]
248 # },
249 }
250 }
251 controller = CustomController()
252 await controller.setup_mcp_client(mcp_server_config)
253 use_own_browser = True
254 use_vision = True # Set to False when using DeepSeek
255
256 max_actions_per_step = 10
257 browser = None
258 browser_context = None
259
260 try:
261 extra_browser_args = []
262 if use_own_browser:
263 browser_binary_path = os.getenv("BROWSER_PATH", None)
264 if browser_binary_path == "":
265 browser_binary_path = None
266 browser_user_data = os.getenv("BROWSER_USER_DATA", None)
267 if browser_user_data:
268 extra_browser_args += [f"--user-data-dir={browser_user_data}"]
269 else:
270 browser_binary_path = None
271 browser = CustomBrowser(
272 config=BrowserConfig(
273 headless=False,
274 browser_binary_path=browser_binary_path,
275 extra_browser_args=extra_browser_args,
276 new_context_config=BrowserContextConfig(
277 window_width=window_w,
278 window_height=window_h,
279 )
280 )
281 )
282 browser_context = await browser.new_context(
283 config=BrowserContextConfig(
284 trace_path=None,
285 save_recording_path=None,
286 save_downloads_path="./tmp/downloads",
287 window_height=window_h,
288 window_width=window_w,
289 force_new_context=True
290 )
291 )
292 agents = [
293 BrowserUseAgent(task=task, llm=llm, browser=browser, controller=controller)
294 for task in [
295 'Search Google for weather in Tokyo',
296 # 'Check Reddit front page title',
297 # 'Find NASA image of the day',
298 # 'Check top story on CNN',
299 # 'Search latest SpaceX launch date',
300 # 'Look up population of Paris',
301 'Find current time in Sydney',
302 'Check who won last Super Bowl',
303 # 'Search trending topics on Twitter',
304 ]
305 ]
306
307 history = await asyncio.gather(*[agent.run() for agent in agents])
308 print("Final Result:")
309 pprint(history.final_result(), indent=4)
310
311 print("\nErrors:")
312 pprint(history.errors(), indent=4)
313
314 pdb.set_trace()
315
316 except Exception:
317 import traceback
318
319 traceback.print_exc()
320 finally:
321 if browser_context:
322 await browser_context.close()
323 if browser:
324 await browser.close()
325 if controller:
326 await controller.close_mcp_client()
327
328
329async def test_deep_research_agent():
330 from src.agent.deep_research.deep_research_agent import DeepResearchAgent, PLAN_FILENAME, REPORT_FILENAME
331 from src.utils import llm_provider
332
333 llm = llm_provider.get_llm_model(
334 provider="openai",
335 model_name="gpt-4o",
336 temperature=0.5
337 )
338
339 # llm = llm_provider.get_llm_model(
340 # provider="bedrock",
341 # )
342
343 mcp_server_config = {
344 "mcpServers": {
345 "desktop-commander": {
346 "command": "npx",
347 "args": [
348 "-y",
349 "@wonderwhy-er/desktop-commander"
350 ]
351 },
352 }
353 }
354
355 browser_config = {"headless": False, "window_width": 1280, "window_height": 1100, "use_own_browser": False}
356 agent = DeepResearchAgent(llm=llm, browser_config=browser_config, mcp_server_config=mcp_server_config)
357 research_topic = "Give me investment advices of nvidia and tesla."
358 task_id_to_resume = "" # Set this to resume a previous task ID
359
360 print(f"Starting research on: {research_topic}")
361
362 try:
363 # Call run and wait for the final result dictionary
364 result = await agent.run(research_topic,
365 task_id=task_id_to_resume,
366 save_dir="./tmp/deep_research",
367 max_parallel_browsers=1,
368 )
369
370 print("\n--- Research Process Ended ---")
371 print(f"Status: {result.get('status')}")
372 print(f"Message: {result.get('message')}")
373 print(f"Task ID: {result.get('task_id')}")
374
375 # Check the final state for the report
376 final_state = result.get('final_state', {})
377 if final_state:
378 print("\n--- Final State Summary ---")
379 print(
380 f" Plan Steps Completed: {sum(1 for item in final_state.get('research_plan', []) if item.get('status') == 'completed')}")
381 print(f" Total Search Results Logged: {len(final_state.get('search_results', []))}")
382 if final_state.get("final_report"):
383 print(" Final Report: Generated (content omitted). You can find it in the output directory.")
384 # print("\n--- Final Report ---") # Optionally print report
385 # print(final_state["final_report"])
386 else:
387 print(" Final Report: Not generated.")
388 else:
389 print("Final state information not available.")
390
391
392 except Exception as e:
393 print(f"\n--- An unhandled error occurred outside the agent run ---")
394 print(e)
395
396
397if __name__ == "__main__":
398 asyncio.run(test_browser_use_agent())
399 # asyncio.run(test_browser_use_parallel())
400 # asyncio.run(test_deep_research_agent())
401 