python
Utilities
Selenium Browser Automation
Selenium WebDriver wrapper with headless mode, wait utilities, screenshot capture, and cookie management.
Apex Logic
0 copies
python
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
from selenium.common.exceptions import TimeoutException
import json
from pathlib import Path
class BrowserAutomation:
def __init__(self, headless: bool = True, timeout: int = 10):
options = Options()
if headless:
options.add_argument("--headless=new")
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")
options.add_argument("--window-size=1920,1080")
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64)")
self.driver = webdriver.Chrome(options=options)
self.driver.implicitly_wait(timeout)
self.wait = WebDriverWait(self.driver, timeout)
def navigate(self, url: str) -> "BrowserAutomation":
self.driver.get(url)
return self
def click(self, selector: str, by: str = "css") -> "BrowserAutomation":
locator = By.CSS_SELECTOR if by == "css" else By.XPATH
self.wait.until(EC.element_to_be_clickable((locator, selector))).click()
return self
def fill(self, selector: str, text: str) -> "BrowserAutomation":
el = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, selector)))
el.clear()
el.send_keys(text)
return self
def get_text(self, selector: str) -> str:
el = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, selector)))
return el.text
def screenshot(self, filename: str = "screenshot.png") -> None:
self.driver.save_screenshot(filename)
def save_cookies(self, path: str = "cookies.json") -> None:
Path(path).write_text(json.dumps(self.driver.get_cookies()))
def load_cookies(self, path: str = "cookies.json") -> None:
cookies = json.loads(Path(path).read_text())
for cookie in cookies:
self.driver.add_cookie(cookie)
def close(self) -> None:
self.driver.quit()
def __enter__(self):
return self
def __exit__(self, *args):
self.close()
if __name__ == "__main__":
with BrowserAutomation(headless=True) as browser:
browser.navigate("https://example.com")
title = browser.driver.title
print(f"Page title: {title}")