#1092·rod

支持连接到 BrightData Scraping 浏览器

作者: apuigsech创建于 2024年7月17日更新于 2026年9月8日
标签enhancediscuss

我想使用可扩展的浏览器基础设施服务,例如 BrightData Scraping Browser,这些服务与 Puppeteer 很好地集成。但是,我在尝试使用这些服务与 go-rod 时遇到了一些问题。我想请求以下增强,以提高兼容性:

1. WebSocket 身份验证:

连接到这些服务的 WebSocket 需要身份验证(例如,wss://user:pass@host:9222)。但是,go-rod 目前不发送必要的身份验证头,我认为这些头在任何 WebSocket 标准中都没有定义。通过我的研究,我发现身份验证是使用基本令牌进行的。我已经实现了一个可行的解决方案,用于注入授权头。但是,我不确定这是注入的最佳位置。如果这个解决方案符合项目的方向,我愿意提交一个 PR,其中包含我的 实现

2. 更松散的 WebSocket 响应处理:

这些服务有时会发送偏离预期 go-rod 响应结构的响应,导致解析失败而引发异常。特别是,Error 结构期望有一个整数 Code,但某些响应包含字符串(例如,“navigate_limit”)。响应结构定义如下:

go
type Response struct {
  ID     int             `json:"id"`
  Result json.RawMessage `json:"result,omitempty"`
  Error  *Error          `json:"error,omitempty"`
}

type Error struct {
  Code    int    `json:"code"`
  Message string `json:"message"`
  Data    string `json:"data"`
}

Brightdata 向我发送了一个会引发异常的结构,如下所示:

json
{
  "id": 27,
  "sessionId": "BRD_461626884EEF95862B6188C2DBB766D1",
  "error": {
    "message": "Page.navigate limit reached",
    "code": "navigate_limit" // 此处预期为整数。
  },
  "duration": 1.2261550000112038
}

为了使 go-rod 更兼容,可能需要放宽 Error 结构的标准严格性。我会很感谢您提供有关实现此灵活性的最佳方法的指导。如果您同意这一点,我很乐意在得到一些指导的情况下开展实现工作。