| from playwright.sync_api import sync_playwright | |
| class BrowserController: | |
| def __init__(self): | |
| self.playwright = sync_playwright().start() | |
| self.browser = self.playwright.chromium.launch(headless=True) | |
| self.page = self.browser.new_page() | |
| def navigate(self, url): | |
| self.page.goto(url) | |
| return self.get_state() | |
| def click(self, selector): | |
| self.page.click(selector) | |
| return self.get_state() | |
| def type_text(self, selector, text): | |
| self.page.fill(selector, text) | |
| return self.get_state() | |
| def scroll(self, pixels): | |
| self.page.evaluate(f'window.scrollBy(0, {pixels})') | |
| return self.get_state() | |
| def get_state(self): | |
| return { | |
| "screenshot": self.page.screenshot().hex(), | |
| "html": self.page.content() | |
| } | |
| def close(self): | |
| self.browser.close() | |
| self.playwright.stop() |