35 lines
1.2 KiB
Python
35 lines
1.2 KiB
Python
#!/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()
|