Merged viewport in dom service

This commit is contained in:
magmueller
2025-01-20 08:43:16 -08:00
parent 2c1e1adb18
commit 97c19afd16

View File

@@ -21,23 +21,32 @@ class DomService:
self.xpath_cache = {}
# region - Clickable elements
async def get_clickable_elements(self, highlight_elements: bool = True, focus_element: int = -1) -> DOMState:
element_tree = await self._build_dom_tree(highlight_elements, focus_element)
async def get_clickable_elements(
self,
highlight_elements: bool = True,
focus_element: int = -1,
viewport_expansion: int = 0,
) -> DOMState:
element_tree = await self._build_dom_tree(highlight_elements, focus_element, viewport_expansion)
selector_map = self._create_selector_map(element_tree)
return DOMState(element_tree=element_tree, selector_map=selector_map)
async def _build_dom_tree(self, highlight_elements: bool, focus_element: int) -> DOMElementNode:
async def _build_dom_tree(
self,
highlight_elements: bool,
focus_element: int,
viewport_expansion: int,
) -> DOMElementNode:
js_code = resources.read_text('browser_use.dom', 'buildDomTree.js')
args = {
"doHighlightElements": highlight_elements,
"focusHighlightIndex": focus_element,
'doHighlightElements': highlight_elements,
'focusHighlightIndex': focus_element,
'viewportExpansion': viewport_expansion,
}
eval_page = await self.page.evaluate(
js_code, args
) # This is quite big, so be careful
eval_page = await self.page.evaluate(js_code, args) # This is quite big, so be careful
html_to_dict = self._parse_node(eval_page)
if html_to_dict is None or not isinstance(html_to_dict, DOMElementNode):