import asyncio import os import sys from aiohttp import web # make sure to install aiohttp: pip install aiohttp from dotenv import load_dotenv from langchain_openai import ChatOpenAI # from langchain_google_genai import ChatGoogleGenerativeAI # Adjust path if necessary sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from browser_use import Agent, Controller # Define a simple HTML page HTML_CONTENT = """ Custom Select Div
Select a fruit
Apples
Oranges
Pineapples
Select a fruit
Apples
Oranges
Pineapples
Select a fruit
Apples
Oranges
Pineapples
Select a fruit
Apples
Oranges
Pineapples
""" # aiohttp request handler to serve the HTML content async def handle_root(request): return web.Response(text=HTML_CONTENT, content_type='text/html') # Function to run the HTTP server async def run_http_server(): app = web.Application() app.router.add_get('/', handle_root) runner = web.AppRunner(app) await runner.setup() site = web.TCPSite(runner, 'localhost', 8000) await site.start() print('HTTP server running on http://localhost:8000') # Keep the server running indefinitely. while True: await asyncio.sleep(3600) # Your agent tasks and other logic load_dotenv() controller = Controller() async def main(): # Start the HTTP server in the background. server_task = asyncio.create_task(run_http_server()) # Example tasks for the agent. xpath_task = 'Open http://localhost:8000/, click element with the xpath "/html/body/div/div[1]" and then click on Oranges' css_selector_task = 'Open http://localhost:8000/, click element with the selector div.select-display and then click on apples' text_task = 'Open http://localhost:8000/, click the third element with the text "Select a fruit" and then click on Apples, then click the second element with the text "Select a fruit" and then click on Oranges' select_task = 'Open http://localhost:8000/, choose the car BMW' button_task = 'Open http://localhost:8000/, click on the button' llm = ChatOpenAI(model='gpt-4o') # llm = ChatGoogleGenerativeAI( # model="gemini-2.0-flash-lite", # ) # Run different agent tasks. for task in [xpath_task, css_selector_task, text_task, select_task, button_task]: agent = Agent( task=task, llm=llm, controller=controller, ) await agent.run() # Wait for user input before shutting down. input('Press Enter to close...') # Cancel the server task once finished. server_task.cancel() try: await server_task except asyncio.CancelledError: print('HTTP server stopped.') if __name__ == '__main__': asyncio.run(main())