ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Browsh:基于无头 Firefox 与 TTY 渲染的全功能文本浏览器实战指南

Browsh:基于无头 Firefox 与 TTY 渲染的全功能文本浏览器实战指南 CLI【免费下载链接】browshA fully-modern text-based browser, rendering to TTY and browsers项目地址https://gitcode.com/gh_mirrors/br/browsh点击查看免费下载Browsh 是一款完全现代化的文本浏览器它不像传统文本浏览器那样直接解析 HTML而是以真实的 Firefox 浏览器无头模式为渲染引擎再将页面转成纯文本形态输出到终端TTY或浏览器。本指南以仓库 README.md 为主线结合 interfacer 与 webext 源码带你理解其工作原理、安装方式、运行参数、配置项与测试方法掌握在低带宽、低功耗环境下用 SSH 浏览互联网的完整实战方案。为什么需要 Browsh低带宽场景的文本浏览方案不是所有人的网络都足够快。当你只有手机热点提供的 3kbps 连接时直接让本地浏览器下载整个网页几乎不可行而通过 SSH 连接一台服务器由服务器完成网页下载、只把渲染结果经 SSH 传回终端则能把有限的带宽发挥到极致。传统文本浏览器如 elinks的问题在于不支持 JavaScript 与现代 HTML5 特性导致大量网站根本无法使用。Browsh 的核心差异在于背后是一个真实的浏览器它由无头 Firefox 驱动生成网页的纯文本版本再渲染到终端——或者讽刺地渲染到另一个浏览器中。需要注意当前仓库 README 明确说明浏览器客户端browser client与终端客户端terminal client尚未实现特性对等见 README.md。为什么不用 VNCVNC 是常见方案但它在极差网络下表现不佳。终端 Browsh 支持通过 MoSH 进一步降低带宽并提升连接稳定性MoSH 提供掉线/漫游后的自动重连、仅传输差异部分的屏幕更新diff-only screen updates等能力。此外除了 SSH 或 MoSH 之外终端 Browsh 不需要像 VNC 那样的独立客户端。额外收益转移浏览器能耗终端 Browsh 的另一个实用场景是把现代浏览器的耗电负担从笔记本或树莓派等低功耗设备上转移出去——浏览器运行在服务器上使用市电本地仅运行 CLI 客户端从而延长电池续航。安装二进制与 Docker 两种方式安装十分轻量二进制包约 11MB。仓库 README 给出的两种方式如下# 方式一从 releases 下载二进制约 11MB需预先安装 Firefox # 下载后直接运行 browsh 二进制即可 # 方式二Docker 镜像约 230MB docker run --rm -it browsh/browsh无论哪种方式机器上都必须有 Firefox至少满足源码中版本检查的要求见 firefox.go。Browsh 与 Firefox 通过Marionette 协议监听127.0.0.1:2828见 firefox.go通信并注入自带打包的 Web 扩展browsh.xpi见 firefox.go来在页面内执行必要 JS。使用体验接近桌面浏览器的键鼠操作Browsh 的交互目标是大多数按键与鼠标手势都能像桌面浏览器一样工作支持多标签页Tab 栏渲染于终端顶部见 ui.go、URL 地址栏、页面内输入框聚焦input_box.go、滚动等。启动时还可以直接传入 URL 作为命令行参数多个参数会分别打开多个标签页见 browsh.go。工作原理从 DOM 到 TTY 的渲染管线理解 Browsh 需要把握两条链路内容生成链路页面 → 文本/像素数据与通信链路Firefox ↔ Go 服务 ↔ TTY。Web 扩展在页面内执行关键 JSWeb 扩展位于 webext是 Browsh 在网页内执行必要 JS 的关键组件它把 DOM 序列化后经 WebSocket 回传。其清单声明了 background 脚本background.js与 content scriptcontent.js匹配所有 URL、在document_start注入并申请了all_urls、webRequest、tabs等权限见 manifest.json。Go 服务帧构建与渲染Go 端interfacer/src/browsh通过 frame_builder.go 完成帧构建Web 扩展每帧发送text每格字符、coloursRGB 颜色、input_boxes页面输入框等数据Go 端解析 JSON 后写入帧网格frame_builder.go。UTF-8 半块half-block技巧是 Browsh 的像素渲染核心字符▄恰好占据半个文本单元上半个像素用背景色表示、下半个用前景色表示因此一个文本格能携带 2 个像素颜色frame_builder.go。TTY 是帧上的一个窗口滚动状态与真实浏览器同步frame_builder.go。终端渲染使用 tcell 库browsh.go并在非 Windows 平台强制TERMxterm-truecolor以支持真彩色browsh.go。通信链路WebSocket 双向通道Go 端启动 WebSocket 服务器端口默认 3334见 comms.goFirefox 内的 Web 扩展连入后扩展 → Go/frame_text、/frame_pixels、/tab_state、/screenshot、/raw_text等命令comms.goGo → 扩展/new_tab、/remove_tab、/switch_to_tab、/config、/status等指令comms.go。启动时若命令行没有传入 URLGo 端会向扩展发送/new_tab,startup-url打开默认首页comms.go。开发环境搭建webext 与 Go 双端编译Firefox Web 扩展开发需要nodejsREADME 推荐使用 mise 管理运行时。在webext目录执行npm install npx webpack --watchwebpack --watch会持续把 src 下的源码background 的 tab/manager、dom 的 graphics_builder/text_builder 等模块打包为 background.js 与 content.js。构建脚本与依赖版本见 webext/package.json。Browsh Go 代码开发需要go。在interfacer目录执行go run ./cmd/browsh --debug入口为 interfacer/cmd/browsh/main.go它调用 MainEntry()解析 pflag 参数 → 加载配置 → 根据http-server-mode决定进入 HTTP 服务模式还是 TTY 交互模式。调试日志写入interfacer/debug.log——--debug会把slog输出重定向到该文件browsh.go。配置详解config.toml 全参数说明首次运行 Browsh 会在跨平台配置目录Linux 下基于configdir的全局目录命名空间为browsh自动生成config.toml内容来自内置的示例配置见 config.go 与 config_sample.go。配置加载使用 viper先读取内置示例作为默认值再合并用户配置文件最后以命令行 flag 覆盖config.go。全局配置配置项默认值说明browsh_supporter♥捐赠支持标记设置为I have shown my support for Browsh可关闭界面底部的Unsupported version / brow.sh/donate提示ui.gostartup-urlhttp://www.brow.sh启动时打开的页面该 URL 不可访问会导致 Browsh 启动失败default_search_engine_basehttps://www.google.com/search?q在 URL 栏输入非 URL 内容时使用的搜索引擎前缀mobile_user_agentAndroid/Firefox UA 字符串强制网页使用移动端布局的用户代理[browsh]段内部服务配置项默认值说明websocket-port3334Go 端 WebSocket 服务监听端口comms.gouse_experimental_text_visibilityfalse实验性文本可见性处理改善重叠文本显示可用 F6 在浏览器内切换custom_css应用到所有已加载标签页的自定义 CSS支持多行字符串例如设置body { background-colour: black; }[firefox]段浏览器控制配置项默认值说明pathfirefoxFirefox 可执行文件路径默认值下 Windows 会查找安装路径、macOS 使用/Applications/Firefox.app/Contents/MacOS/firefoxfirefox.goprofilebrowsh-default浏览器配置文件非默认值时会用-P profile启动use-existingfalse不让 Browsh 启动 Firefox改为连接已存在的实例该实例必须以--marionette标志启动firefox.gowith-guifalse以可见 GUI 窗口启动 Firefox非 headless便于配置 Browsh profilepreferences注释示例相当于 Firefoxabout:config的偏好设置字符串值需加引号例如privacy.resistFingerprintingtrue、network.proxy.httplocalhost、network.proxy.http_port8118、network.proxy.type1Browsh 会通过 Marionette 在启动时依次写入firefox.go[tty]段终端渲染帧率配置项默认值说明small_pixel_frame_rate250请求新一帧 TTY 尺寸像素帧的间隔毫秒即图形帧率值越小动画越流畅、CPU 负载越高[http-server]段HTTP 纯文本服务Browsh 还可作为 HTTP 服务运行--http-server-mode把 URL 放进请求路径返回换行分隔的纯文本页面。例如请求curl browsh-http-service.com/http://something.com返回该页面的纯文本raw_text_server.go。配置项默认值说明port4333HTTP 服务监听端口bind0.0.0.0绑定地址render_delay100DOM 就绪后等待的毫秒数再解析文本太短文本可能未解析太长则白白等待timeout30放弃页面加载前等待的秒数超时返回Browsh rendering aborted after 30s timeout.raw_text_server.gocolumns/rows100/30字符窗口尺寸columns 决定最终文本宽度rows 决定原始浏览器窗口可见的网页高度从而影响懒加载图片何时加载jpeg_compression0.9页面背景图的 JPG 有损压缩比rate-limit100000000-M速率限制语法遵循 ulule/limiter 库raw_text_server.goblocked-domains[]屏蔽域名列表每项按正则表达式求值命中则 301 跳回首页blocked-user-agents[]屏蔽 UA 列表同样按正则求值命中则 403header/footer最终页面顶部/底部展示的 HTML 片段此外该服务还支持text.子域返回PLAIN纯文本模式、通过X-Browsh-Raw-Mode请求头切换PLAIN/DOM模式raw_text_server.go、响应头携带X-Browsh-Duration-*计时信息、内置 gzip 压缩与缓存控制Cache-Control: public, max-age600并对favicon.ico、robots.txt、K8s 就绪探针UA 含GoogleHC做了专门处理raw_text_server.go。常用 CLI 参数除配置文件外Browsh 提供一组 pflag 命令行参数config.go优先级高于配置文件参数默认值说明--debugfalse将日志写入当前目录debug.log--time-limit0指定秒数后自动退出结束前 10 秒在状态栏提示见 firefox.go--http-server-modefalse以 HTTP 服务模式运行而非 TTY 交互--startup-urlhttps://www.brow.sh启动时打开的 URL--firefox.pathfirefoxFirefox 可执行文件路径--firefox.with-guifalse不使用无头 Firefox--firefox.use-existingfalse不启动 Firefox连接已有实例--monochromefalse以单色模式启动--namefalse仅打印Browsh后退出--versionfalse输出版本号后退出browsh.go测试体系仓库 README 给出四类测试分别覆盖两个端测试基建位于 interfacer/test# Web 扩展测试webext 目录 npm test # CLI 单元测试interfacer 目录 go test src/browsh/*.go # CLI 端到端测试interfacer 目录 go test test/tty/*.go # HTTP 服务测试interfacer 目录 go test test/http-server/*.go测试覆盖了帧构建逻辑frame_builder_test.go、原始文本服务raw_text_server_test.go、多行输入input_multiline_test.go、TTY 端到端tty_test.go以及 HTTP 服务server_test.go等。小结Browsh 用真实浏览器 文本化渲染的方案重新定义了文本浏览器以无头 Firefox 与 Marionette/WebSocket 为骨架、以 UTF-8 半块字符为像素载体将完整现代网页压缩进一根 SSH 管道。无论你是想为低带宽环境部署终端浏览器还是计划研究浏览器到 TTY渲染管线都可以从 README.md 起步结合 interfacer/src/browsh 的配置与帧构建源码、webext 的扩展注入代码逐步深入。赞分享CLI【免费下载链接】browshA fully-modern text-based browser, rendering to TTY and browsers项目地址https://gitcode.com/gh_mirrors/br/browsh点击查看免费下载相关推荐5分钟上手KKJSBridge从集成到离线包加载的快速指南5分钟上手KKJSBridge从集成到离线包加载的快速指南 KKJSBridge是一款专为iOS开发者打造的终极解决方案旨在一站式解决WKWebView中的Browsh终极指南现代文本浏览器的10个核心功能与实战技巧Browsh终极指南现代文本浏览器的10个核心功能与实战技巧 Browsh是一款完全现代化的文本浏览器能够在TTY终端和普通浏览器中渲染网页内容。它通过无头CLIBrowsh开发者指南如何扩展文本浏览器功能Browsh开发者指南如何扩展文本浏览器功能 Browsh是一个革命性的文本浏览器它将现代网页渲染到终端和浏览器中为开发者提供了独特的扩展能力。这个开源项CLI上一篇Jigasi 项目常见问题解决方案下一篇控制P5ControlP5GUI库常见问题解答创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表