Skip to content

Commit a3fa1c9

Browse files
committed
python playwright backend draft
1 parent 4117e0a commit a3fa1c9

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
from playwright.sync_api import sync_playwright
2+
3+
from agentlab.backends.browser.base import BrowserBackend, ToolCallAction
4+
5+
6+
class PlaywrightSyncBackend(BrowserBackend):
7+
def __init__(self):
8+
self.actions = {
9+
"browser_press_key": lambda key: self.page.keyboard.press(key),
10+
"browser_type": lambda text: self.page.type(text),
11+
"browser_click": lambda selector: self.page.click(selector),
12+
"browser_drag": lambda from_selector, to_selector: self.drag_and_drop(
13+
from_selector, to_selector
14+
),
15+
"browser_hover": lambda selector: self.page.hover(selector),
16+
"browser_select_option": lambda selector: self.page.select_option(selector),
17+
"browser_mouse_click_xy": lambda x, y: self.page.mouse.click(x, y),
18+
}
19+
20+
def drag_and_drop(self, from_selector: str, to_selector: str):
21+
from_elem = self.page.locator(from_selector)
22+
from_elem.hover(timeout=500)
23+
self.page.mouse.down()
24+
25+
to_elem = self.page.locator(to_selector)
26+
to_elem.hover(timeout=500)
27+
self.page.mouse.up()
28+
29+
def initialize(self):
30+
self.browser = sync_playwright().start().chromium.launch(headless=True)
31+
self.page = self.browser.new_page()
32+
33+
def run_js(self, js: str):
34+
return self.page.evaluate(js)
35+
36+
def goto(self, url: str):
37+
self.page.goto(url)
38+
39+
def page_snapshot(self):
40+
return self.page.content()
41+
42+
def page_screenshot(self):
43+
return self.page.screenshot()
44+
45+
def step(self, action: ToolCallAction):
46+
fn = self.actions[action.function.name]
47+
return fn(**action.function.arguments)
48+
49+
def actions(self):
50+
return self.page.actions()
51+
52+
def close(self):
53+
self.browser.close()

0 commit comments

Comments
 (0)