#!/usr/bin/env python3 import sys import argparse from dogtail.tree import root def dump_node(node, depth=0, max_depth=10): if depth > max_depth: return try: name = node.name.strip() role = node.roleName # Only print if it has a name or is an interesting interactive element if name or role in ['push button', 'entry', 'menu item', 'toggle button', 'check box']: print(' ' * depth + f'<{role}> {name}') for child in node.children: dump_node(child, depth + 1, max_depth) except: pass def main(): parser = argparse.ArgumentParser(description="Inspect Linux GUI application UI tree.") parser.add_argument("app_name", help="Name of the application to inspect.") parser.add_argument("--max-depth", type=int, default=15, help="Maximum depth to traverse.") args = parser.parse_args() try: app = root.application(args.app_name) print(f"Dump for application: {args.app_name}") dump_node(app, max_depth=args.max_depth) except Exception as e: print(f"Error: Could not find or inspect application '{args.app_name}'. {e}") if __name__ == "__main__": main()