KMH
Initial commit: FastVLM Screen Observer application
509a107
try:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
SELENIUM_AVAILABLE = True
except ImportError:
SELENIUM_AVAILABLE = False
print("Selenium not installed - demo automation disabled")
try:
import pyautogui
PYAUTOGUI_AVAILABLE = True
except ImportError:
PYAUTOGUI_AVAILABLE = False
print("PyAutoGUI not installed - automation features limited")
import time
import asyncio
class BrowserAutomation:
def __init__(self):
self.driver = None
if PYAUTOGUI_AVAILABLE:
pyautogui.FAILSAFE = True
pyautogui.PAUSE = 0.5
def initialize_driver(self):
if not SELENIUM_AVAILABLE:
print("Selenium not available - cannot initialize driver")
return
try:
chrome_options = Options()
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option('useAutomationExtension', False)
service = Service(ChromeDriverManager().install())
self.driver = webdriver.Chrome(service=service, options=chrome_options)
self.driver.set_window_size(1280, 720)
self.driver.set_window_position(100, 100)
except Exception as e:
print(f"Driver initialization error: {e}")
self.driver = None
async def run_demo(self, url: str, text_to_type: str):
loop = asyncio.get_event_loop()
await loop.run_in_executor(None, self._run_demo_sync, url, text_to_type)
def _run_demo_sync(self, url: str, text_to_type: str):
if not SELENIUM_AVAILABLE:
print(f"Demo mode: Would open {url} and type '{text_to_type}'")
time.sleep(2)
return
try:
if self.driver is None:
self.initialize_driver()
if self.driver:
self.driver.get(url)
time.sleep(2)
try:
search_box = self.driver.find_element(By.TAG_NAME, "input")
search_box.click()
search_box.send_keys(text_to_type)
except:
body = self.driver.find_element(By.TAG_NAME, "body")
body.click()
body.send_keys(text_to_type)
time.sleep(1)
if PYAUTOGUI_AVAILABLE:
original_window = pyautogui.getActiveWindow()
if original_window:
original_window.activate()
time.sleep(5)
self.driver.quit()
self.driver = None
except Exception as e:
print(f"Demo execution error: {e}")
if self.driver:
self.driver.quit()
self.driver = None
def cleanup(self):
if self.driver:
self.driver.quit()
self.driver = None