Python YAML Snapshot Processing & Agent-Friendly Formatting
Objective
Transform the raw DOM snapshot data into a structured YAML format optimized for agent interaction, using a hierarchical tree structure that clearly represents element relationships, states, and interaction capabilities.
Technical Approach
YAML Hierarchical Structure
- Tree-Based Representation: Mirror DOM hierarchy with indented YAML structure
- Semantic Role Labels: Use accessibility roles (textbox, button, checkbox) instead of HTML tags
- Inline Properties: Include ref attributes and state information in square brackets
- Descriptive Text: Provide clear, contextual descriptions for each element
Python Processing Pipeline
Raw Snapshot to YAML Transformation
class YAMLSnapshotProcessor:
def process_to_yaml(self, raw_snapshot: dict) -> str:
yaml_tree = self._build_hierarchical_structure(raw_snapshot)
return self._format_as_yaml_tree(yaml_tree)
def _format_element(self, element: dict) -> str:
role = self._map_to_accessibility_role(element)
description = self._extract_description(element)
ref = f"[ref={element['ref']}]"
properties = self._format_properties(element)
return f"{role} \"{description}\" {ref}{properties}:"
Element Role Mapping
ELEMENT_ROLE_MAP = {
'input[type="text"]': 'textbox',
'input[type="email"]': 'textbox',
'input[type="radio"]': 'radio',
'input[type="checkbox"]': 'checkbox',
'select': 'combobox',
'button': 'button',
'a': 'link',
'h1,h2,h3,h4,h5,h6': 'heading',
'div[role="main"]': 'WebArea'
}
Implementation Features
YAML Structure Generation
Element Processing Rules
def format_yaml_element(element):
# Base format: role "description" [ref=eX] [properties]:
# For form inputs
if element.role == 'textbox':
return f'textbox "{element.label or element.placeholder}" [ref={element.ref}]:'
# For radio/checkbox with state
elif element.role in ['radio', 'checkbox']:
checked = f"[checked={element.checked}]" if 'checked' in element else ""
return f'{element.role} "{element.text}" [ref={element.ref}] {checked}:'
# For select elements with options
elif element.role == 'combobox':
value_info = f"\n - value: {element.current_value}"
options = self._format_options(element.options)
return f'combobox "{element.label}" [ref={element.ref}]:{value_info}{options}'
State and Property Handling
PROPERTY_EXTRACTORS = {
'checked': lambda el: el.get('checked', False),
'selected': lambda el: el.get('selected', False),
'disabled': lambda el: el.get('disabled', False),
'required': lambda el: el.get('required', False),
'value': lambda el: el.get('value', ''),
}
Expected YAML Output Structure
Form Elements Example
- WebArea "Scholarship Application Form" [ref=e1]:
- heading "Personal Information" [ref=e2]:
- text "Please fill out your basic information:" [ref=e3]:
- textbox "First Name" [ref=e4]:
- textbox "Last Name" [ref=e5]:
- textbox "Email Address" [ref=e6] [required=True]:
- text "Education Level:" [ref=e7]:
- radio "High School" [ref=e8] [checked=False]:
- radio "Undergraduate" [ref=e9] [checked=True]:
- radio "Graduate" [ref=e10] [checked=False]:
- button "Submit Application" [ref=e11]:
Complex Form Controls
- combobox "Select Your Major" [ref=e12]:
- value: Choose a major
- option "Choose a major" [ref=e13] [selected]:
- option "Computer Science" [ref=e14]:
- option "Engineering" [ref=e15]:
- option "Mathematics" [ref=e16]:
Processing Configuration
YAML Generation Settings
YAML_CONFIG = {
"indent_size": 2,
"max_description_length": 80,
"include_empty_elements": False,
"group_related_elements": True,
"preserve_hierarchy": True,
"include_state_properties": True
}
Agent Optimization Features
Agent Interaction Benefits
| Raw DOM |
YAML Format |
Agent Benefit |
<input type="text" id="fname"> |
textbox "First Name" [ref=e4]: |
Clear purpose and interaction type |
| Complex nested HTML |
Indented hierarchy |
Easy relationship understanding |
| Multiple attributes |
[checked=False] [required=True] |
Immediate state awareness |
| Technical selectors |
Human-readable descriptions |
Natural language comprehension |
Processing Pipeline
Step-by-Step Transformation
- Parse Raw Snapshot: Extract elements and hierarchy from custom DOM walker
- Map to Accessibility Roles: Convert HTML tags to semantic roles
- Generate Descriptions: Create meaningful labels from context
- Format Properties: Extract and format state information
- Build YAML Tree: Construct hierarchical YAML structure
- Optimize for Tokens: Compress while maintaining clarity
Error Handling & Fallbacks
Expected Improvements
- Agent Comprehension: 90% improvement in element understanding through clear role/description mapping
- Interaction Accuracy: 85% reduction in targeting errors due to explicit state information
- Token Efficiency: 40% more information density compared to verbose JSON
- Processing Speed: Optimized YAML generation with minimal overhead
This YAML-based snapshot format provides agents with a clear, hierarchical view of page structure while maintaining the semantic richness needed for reliable web automation.
Python YAML Snapshot Processing & Agent-Friendly Formatting
Objective
Transform the raw DOM snapshot data into a structured YAML format optimized for agent interaction, using a hierarchical tree structure that clearly represents element relationships, states, and interaction capabilities.
Technical Approach
YAML Hierarchical Structure
Python Processing Pipeline
Raw Snapshot to YAML Transformation
Element Role Mapping
Implementation Features
YAML Structure Generation
Element Processing Rules
State and Property Handling
Expected YAML Output Structure
Form Elements Example
Complex Form Controls
Processing Configuration
YAML Generation Settings
Agent Optimization Features
Agent Interaction Benefits
<input type="text" id="fname">textbox "First Name" [ref=e4]:[checked=False] [required=True]Processing Pipeline
Step-by-Step Transformation
Error Handling & Fallbacks
Expected Improvements
This YAML-based snapshot format provides agents with a clear, hierarchical view of page structure while maintaining the semantic richness needed for reliable web automation.