用途:在浏览器中操作网页内嵌终端(xterm.js、hterm 等),解决标准 browser_snapshot() 只能看到最后一行提示符的读取难题,适用于 CTF 靶场、Cloud Shell、在线 IDE。
核心原则:找到有效读取方法后一次定型并坚持复用;同一方法最多试 3 次再切换;JS 方法全失败时用截图加视觉分析兜底;用 echo "===START==="; cmd; echo "===END===" 包裹命令以便精确提取输出。
识别终端类型:先用 browser_snapshot() 或 browser_evaluate 探测 .xterm、jQuery.fn.terminal、hterm 等特征。
命令执行:优先用 browser_type(ref='<terminal_input_ref>', text='...', submit=True);或用 browser_click 加 browser_press_key 逐字符输入后按 Enter;执行后按命令快慢用 browser_wait_for(time=2/5/15-30) 等待输出。
输出读取(核心):方法 1 读 .xterm-rows > div 的 innerText;方法 2 读 .xterm-screen innerText;方法 3 尝试通过 _core.buffer.active 的 Terminal API;方法 4 用 marker 包裹精确提取;方法 5 重定向到 /tmp/out.txt 再 cat。读取后须检查输出是否完整,若疑似不完整改用 command > /tmp/verify.txt 2>&1 && cat /tmp/verify.txt 重试。
降级策略:JS 方法失败时用 browser_take_screenshot(type='png', filename='term_output.png') 加 Read 做视觉分析;禁止 fullPage=True,因为全页截图过大会导致 SDK JSON buffer 溢出崩溃,只用默认 viewport 截图。
限制与注意事项:xterm.js 的 scrollback buffer 默认约 1000 行,长输出会截断;browser_type 的 text 不要包含换行;不要在同一会话中在 JS 读取方法间反复切换超过 3 次。多行脚本可用 heredoc、base64(echo '...' | base64 -d > /tmp/s.py && python3 /tmp/s.py)或 echo 追加逐行写入。环境变量可同一行 export 或写入脚本内,因 Web 终端可能不允许写入 ~/.aws/credentials。其他细节(如收费、平台支持)暂未提供。