您现在的位置是:烟消火灭网 > 知识

wd内置网页浏览器

烟消火灭网2026-10-17 07:48:24【知识】2人已围观

简介```html wd内置网页浏览器 body { font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica

```html wd内置网页浏览器

第一次在 wd 里点开那个地球图标,我以为是网页插件。后来才知道,浏览它把浏览器做进了应用内部——不是内置调系统默认浏览器,也不是网页塞个 WebView 就完事。wd 内置网页浏览器,浏览本质上是内置一个可编程的浏览层,能直接读写页面 DOM,网页还能把网页内容拆成结构化数据吐给主程序。浏览

我用它做过一个比价小工具。内置打开某电商页面,网页wd 内置浏览器加载完,浏览不需要额外注入脚本,内置直接通过 wd.browser.query(‘.price’) 就拿到了价格文本。网页整个过程没有跳转,浏览也没有弹窗。这跟传统爬虫不一样——爬虫拿的是静态 HTML,而这里拿的是渲染后的实时页面,连懒加载的图片地址都能抓到。

实测:在 wd 内置浏览器里执行 document.querySelectorAll(‘a’).length,返回 247。同一页面用 curl 拿到的 HTML 里只有 89 个链接。差的那 158 个全是 JS 动态生成的。

速度方面,冷启动一个页面大概 1.2 秒(本地测试,i5-10400,16G 内存)。比 Chrome 慢一点,但比 Electron 套壳快得多。原因是它复用了系统 WebView2 的进程池,同时砍掉了书签栏、扩展管理、历史记录这些用不上的模块。内存占用稳定在 80MB 左右,开五个标签页也就 150MB 出头。

有个细节让我挺意外:它支持 wd.browser.intercept()。什么意思?你可以在请求发出前改 header,或者直接返回一个假响应。我试过把某个 API 的 JSON 返回值替换成自定义数据,页面照样正常渲染。这给自动化测试省了太多事——不用起 mock server,不用配代理,几行代码搞定。

当然,它也不是没毛病。比如跨域限制比普通浏览器更严。默认禁止所有第三方 cookie,而且 fetch 请求必须走 wd 自己的代理层。有一次我加载一个用了 Cloudflare 的站点,验证码死活过不去,换成系统浏览器就正常。后来查文档才知道,wd 内置浏览器默认不发送 User-Agent 里的 Chrome/xx 字段,被识别成机器人了。

另外,它没有地址栏。对,你没看错——你没法手动输入 URL。所有导航必须通过代码或者点击页面内的链接。设计者大概觉得,既然叫“内置浏览器”,那用户就不该像用普通浏览器那样用它。这个取舍很极端,但用习惯了反而觉得清爽。就像你写脚本时不会去点菜单栏一样。


我拿它跟 Puppeteer 对比过。同样打开一个新闻列表页,提取所有标题和链接。Puppeteer 需要启动 Chromium 实例,大概 3 秒;wd 内置浏览器 1.5 秒就完事。但 Puppeteer 能截图、能生成 PDF、能模拟移动设备,wd 这边只有 wd.browser.screenshot(),还只能截可视区域。所以它定位很明确:轻量级、嵌入式、数据提取优先。

还有一点,wd 内置浏览器允许你直接调用页面里的 JS 函数。比如页面上有个 window.calcPrice(),你可以在 wd 里写 wd.browser.call(‘calcPrice’, [100]),返回值直接拿到。这比用 evaluate 拼字符串安全多了,也不用担心转义问题。

我现在的用法是:把 wd 内置浏览器当成一个“会渲染的 HTTP 客户端”。需要登录态?先手动在系统浏览器里登好,导出 cookie 塞给 wd。需要处理复杂表单?用 wd.browser.fill() 和 click() 串起来。需要监控页面变化?挂个 MutationObserver 进去,变化时回调主进程。

要说遗憾,就是文档太薄。官方 wiki 只有三页,很多 API 得靠猜或者翻源码。比如 wd.browser.waitFor(‘.loading’, { hidden: true }) 这个用法,我在 issue 里翻了半天才找到。但反过来说,这也逼着你去读它的 TypeScript 定义文件,反而理解得更透。

最后提一句:它不支持 Flash,也不支持 PDF 预览。遇到 .pdf 链接会直接触发下载。如果你需要在线预览 PDF,得自己接 pdf.js。这不算 bug,算 feature——毕竟它不是给你当日常浏览器用的。

```

很赞哦!(89)