import os import argparse import logging from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from webdriver_manager.chrome import ChromeDriverManager import gradio as gr def install_chrome(): os.system("apt update && apt install -y curl") os.system("curl -fsSL https://dl.google.com/linux/linux_signing_key.pub | gpg --dearmor -o /usr/share/keyrings/google-chrome-keyring.gpg") os.system("echo 'deb [signed-by=/usr/share/keyrings/google-chrome-keyring.gpg] http://dl.google.com/linux/chrome/deb/ stable main' | tee /etc/apt/sources.list.d/google-chrome.list") os.system("apt update && apt install -y google-chrome-stable") install_chrome() logger = logging.getLogger(__name__) _global_browser = None def setup_browser(headless=True, window_size=(1280, 720)): global _global_browser chrome_options = Options() if headless: chrome_options.add_argument("--headless") chrome_options.add_argument("--no-sandbox") chrome_options.add_argument("--disable-dev-shm-usage") chrome_options.add_argument(f"--window-size={window_size[0]},{window_size[1]}") chrome_options.binary_location = "/usr/bin/google-chrome-stable" service = Service(ChromeDriverManager().install()) _global_browser = webdriver.Chrome(service=service, options=chrome_options) return _global_browser def close_browser(): global _global_browser if _global_browser: _global_browser.quit() _global_browser = None async def run_agent(task_description, headless=True, window_size=(1280, 720)): global _global_browser if not _global_browser: setup_browser(headless=headless, window_size=window_size) try: logger.info(f"Executing task: {task_description}") _global_browser.get("https://example.com") result = f"Task executed successfully on {task_description}" return result, None except Exception as e: logger.error(f"Error while running agent: {e}") return None, str(e) def create_ui(): with gr.Blocks() as demo: gr.Markdown("# Selenium-based Browser Automation") task_input = gr.Textbox(label="Task Description", placeholder="Describe the task you want to execute...") headless_mode = gr.Checkbox(label="Run in Headless Mode", value=True, interactive=True) run_button = gr.Button("Run Task") output_result = gr.Textbox(label="Result") output_error = gr.Textbox(label="Error") run_button.click(run_agent, inputs=[task_input, headless_mode], outputs=[output_result, output_error]) return demo def main(): parser = argparse.ArgumentParser(description="Gradio UI for Selenium Automation") parser.add_argument("--ip", type=str, default="0.0.0.0", help="IP address to bind to") parser.add_argument("--port", type=int, default=7860, help="Port to listen on") args = parser.parse_args() demo = create_ui() demo.launch(server_name="0.0.0.0", server_port=args.port) if __name__ == "__main__": main()