Webui / app.py
Josedcape's picture
Update app.py
1620ca9 verified
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()