in evals/elsuite/multistep_web_tasks/webarena/browser_env/processors.py [0:0]
def current_viewport_html(self, info: BrowserState) -> str:
# adopted from [natbot](https://github.com/nat/natbot)
tree = info["DOMTree"]
strings = tree["strings"]
document = tree["documents"][0]
nodes = document["nodes"]
attributes = nodes["attributes"]
node_value = nodes["nodeValue"]
parent = nodes["parentIndex"]
node_names = nodes["nodeName"]
layout = document["layout"]
layout_node_cursor = layout["nodeIndex"]
union_bounds = layout["unionBounds"]
graph = defaultdict(lambda: [])
for node_idx in range(len(node_names)):
parent_idx = parent[node_idx]
if parent_idx != -1:
graph[parent_idx].append(node_idx)
def dfs(idx: int) -> str:
node_name = strings[node_names[idx]].lower().strip()
can_skip = "#" in node_name or "::" in node_name
inner_text = ""
node_value_idx = node_value[idx]
if node_value_idx >= 0 and node_value_idx < len(strings):
inner_text = " ".join(strings[node_value_idx].split())
node_attributes = [strings[i] for i in attributes[idx]]
node_attributes_str = ""
for i in range(0, len(node_attributes), 2):
a = node_attributes[i]
b = node_attributes[i + 1]
b = " ".join(b.split())
node_attributes_str += f'{a}="{b}" '
node_attributes_str = node_attributes_str.strip()
html = ""
if not can_skip:
html += f"<{node_name}"
if {node_attributes_str}:
html += f" {node_attributes_str}"
html += f">{inner_text}"
else:
html += f"{inner_text}"
for child_idx in graph[idx]:
if child_idx in layout_node_cursor:
cursor = layout_node_cursor.index(child_idx)
union_bound = union_bounds[cursor]
if not self.partially_in_viewport(union_bound, info["config"]):
continue
html += dfs(child_idx)
if not can_skip:
html += f"</{node_name}>"
return html
html = dfs(0)
return html