49 lines
1.3 KiB
Python
49 lines
1.3 KiB
Python
|
|
"""
|
||
|
|
Chrome browser automation via Selenium.
|
||
|
|
Selenium 4+ handles ChromeDriver automatically — no manual install needed.
|
||
|
|
"""
|
||
|
|
from selenium import webdriver
|
||
|
|
from selenium.webdriver.chrome.options import Options
|
||
|
|
from selenium.webdriver.common.by import By
|
||
|
|
from selenium.webdriver.support.ui import WebDriverWait
|
||
|
|
from selenium.webdriver.support import expected_conditions as EC
|
||
|
|
import urllib.parse
|
||
|
|
|
||
|
|
_driver = None
|
||
|
|
|
||
|
|
def _get_driver(headless: bool = False) -> webdriver.Chrome:
|
||
|
|
global _driver
|
||
|
|
if _driver is None:
|
||
|
|
options = Options()
|
||
|
|
if headless:
|
||
|
|
options.add_argument("--headless=new")
|
||
|
|
options.add_argument("--no-sandbox")
|
||
|
|
options.add_argument("--disable-dev-shm-usage")
|
||
|
|
_driver = webdriver.Chrome(options=options)
|
||
|
|
return _driver
|
||
|
|
|
||
|
|
def navigate_to(url: str):
|
||
|
|
"""Navigate Chrome to a URL."""
|
||
|
|
driver = _get_driver()
|
||
|
|
driver.get(url)
|
||
|
|
return driver.title
|
||
|
|
|
||
|
|
def search_web(query: str):
|
||
|
|
"""Perform a Google search in Chrome."""
|
||
|
|
encoded = urllib.parse.quote_plus(query)
|
||
|
|
return navigate_to(f"https://www.google.com/search?q={encoded}")
|
||
|
|
|
||
|
|
def get_page_title() -> str:
|
||
|
|
driver = _get_driver()
|
||
|
|
return driver.title
|
||
|
|
|
||
|
|
def get_page_url() -> str:
|
||
|
|
driver = _get_driver()
|
||
|
|
return driver.current_url
|
||
|
|
|
||
|
|
def close_browser():
|
||
|
|
global _driver
|
||
|
|
if _driver:
|
||
|
|
_driver.quit()
|
||
|
|
_driver = None
|