常见问题
← 返回全部问题

API 接口怎么用?能对接自己的程序吗?

发布时间:2026-07-12 访问量:3280 全文约 4178 字 分类:自动化与接口
回答摘要能对接。它提供一套「本地 HTTP 接口」:客户端在本机起服务,你的程序用 POST 请求调它开关窗口。套路是:读出端口 → 调打开窗口接口 → 拿到该窗口的调试地址(CDP)→ 用 Selenium/Puppeteer 按地址接管,之后就是标准浏览器自动化。Python、Node、Java 都行,本质就是发 HTTP 请求。具体端口、路径、字段以官方接口文档为准。

能对接,而且方式比很多人想的简单。比特浏览器给的不是云端 API,而是一套本地 HTTP 接口——客户端在你本机上起了一个本地服务,你的程序往这个服务发 HTTP 请求,就能让它去打开、关闭指定窗口。真正做自动化的那部分,靠的是接口返回的浏览器调试地址:你的程序拿到它之后,用 Selenium 或 Puppeteer 这类标准工具接管这个已经开着的窗口,剩下的点击、填表、抓数据就和普通浏览器自动化一模一样了。下面把这套模型和调用流程讲清楚。注意本篇讲的是「写代码对接 API」;如果你要的是不写代码、在客户端里拖拽配置的可视化自动化,那是《有没有自动化/RPA 功能?能批量养号吗》那篇。

核心模型:本地接口 + 用调试地址接管

理解了这张图,后面全是细节。整个对接就是一条链路:

  • 本地服务:客户端运行时,会在本机(127.0.0.1,也就是 localhost)监听一个端口,提供 HTTP 接口。它只在本机上,不是公网服务。
  • 你的程序:Python / Node / Java 都行,本质就是个能发 HTTP POST 请求的程序。
  • 调用打开窗口:你的程序 POST 调「打开窗口」接口,把某个已经建好的窗口启动起来。
  • 拿到调试地址:接口在返回里给你这个窗口的调试地址(CDP,Chrome DevTools Protocol 的调试端口地址)
  • 接管:把这个调试地址交给 Selenium / Puppeteer,它连上去接管这个窗口,之后就是标准自动化。
图注:从「本地接口」到「打开窗口」再到「脚本接管」的调用时序(示意图,字段/端口以官方接口文档为准)
图注:从「本地接口」到「打开窗口」再到「脚本接管」的调用时序(示意图,字段/端口以官方接口文档为准)
提示 为什么是「接管」而不是「重新开一个浏览器」?因为窗口的指纹、代理、Cookie 都由客户端管理和保持一致。你让客户端把窗口开起来、再用调试地址接管,指纹和代理才是对的;如果绕过客户端自己起一个浏览器,那套隔离环境就没了。这是整套设计的关键,务必顺着它来。

第一步:拿到本地接口地址和端口

本地接口的端口不是随便一个数字,也不建议你猜。正确做法是从客户端的配置里读出来,因为它由客户端决定、可能随环境变化。

  • 接口地址形如 http://127.0.0.1:<端口>,只在本机可达。
  • 端口值一般写在客户端的本地配置文件里(Windows 上常见于用户目录下 AppData\Roaming\bitbrowser\config.json 之类的位置,字段名类似 localServerAddress),也可能在客户端界面的接口/开发者设置里直接显示。
  • 具体路径、字段名、默认端口以官方接口文档和你本机实际配置为准,不要把某个网上流传的固定端口号写死进代码。
  • 客户端必须处于运行状态,本地服务才在;客户端没开,接口就调不通。
注意 这是本地接口、通常不带鉴权:任何能访问你这台机器 127.0.0.1 的本地进程理论上都能调它、进而操作你的窗口。所以:别把这个端口通过端口转发/内网穿透暴露到公网,别在不可信的共享机器上裸跑,涉及账号操作的脚本和机器要当敏感资产管。是否提供令牌/密钥鉴权,以官方接口文档为准,若提供请开启。

第二步:打开窗口,拿回调试地址

启动一个窗口,就是向本地服务 POST 一个「打开窗口」请求,请求体里带上你要开的那个窗口的 id,成功后返回里会包含用于接管的调试地址

动作 请求方式 要点
打开/启动窗口 POST 到「打开窗口」接口 请求体带窗口 id,返回里拿调试地址
关闭窗口 POST 到「关闭窗口」接口 传同一个窗口 id
查询/列出窗口 POST 到「列表/详情」接口 用来拿窗口 id、状态
其它管理 POST 到对应接口 改代理、改备注、按序号批量关等

接口路径大致是 browser/open(打开)、browser/close(关闭)、browser/list(列表)这样的风格,都是往前面那个本地地址上 POST、请求体用 JSON。这些路径和返回字段的确切写法,请以官方接口文档为准——版本更新时接口可能调整,别照抄第三方示例里的老字段。打开成功后,从返回数据里取出那个调试地址字段(通常是形如 ip:端口 的 HTTP 调试地址,交给下一步当 debuggerAddress 用)。

第三步:用 Selenium / Puppeteer 接管

拿到调试地址后,自动化就落到标准工具上了。关键点只有一个:不要让工具自己新起浏览器,而是让它连到那个已经开着的调试地址上

Selenium(以 Python 为例)

思路是把上一步拿到的调试地址填进 Chrome 的 debuggerAddress 选项,Selenium 就会去接管那个窗口,而不是新开一个:

import requests
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

# 1) 本地接口地址(端口从客户端配置读出,别写死)
BASE = 'http://127.0.0.1:<你的端口>'

# 2) 打开指定窗口,拿回调试地址
r = requests.post(f'{BASE}/browser/open', json={'id': '你的窗口ID'}, timeout=15)
data = r.json()
debug_addr = data['data']['http']   # 形如 127.0.0.1:xxxxx,字段名以官方文档为准

# 3) 用 debuggerAddress 接管,而不是新开浏览器
opts = Options()
opts.add_experimental_option('debuggerAddress', debug_addr)
driver = webdriver.Chrome(options=opts)   # 需自备与内核版本匹配的 chromedriver

driver.get('https://你的目标站点')
print(driver.title)

# 4) 用完通过接口关闭窗口
requests.post(f'{BASE}/browser/close', json={'id': '你的窗口ID'}, timeout=15)
提示 用 Selenium 接管时,通常要自备一个和窗口内核版本匹配的 chromedriver,版本对不上会连不上或报错。上面代码里的接口路径 browser/open、返回字段 data.data.http 是社区常见用法示意,确切名称请以官方接口文档为准,不同版本可能不同。

Puppeteer(以 Node 为例)

Node 侧同理,用 Puppeteer 的 connect 连到调试地址,而不是 launch 新开:

const puppeteer = require('puppeteer-core');

// 已通过本地接口 POST /browser/open 拿到 wsEndpoint 或 http 调试地址
const browser = await puppeteer.connect({
  browserURL: 'http://127.0.0.1:xxxxx',   // 上一步接口返回的调试地址
  defaultViewport: null,
});
const page = (await browser.pages())[0] || await browser.newPage();
await page.goto('https://你的目标站点');
console.log(await page.title());
await browser.disconnect();   // 断开连接;关闭窗口仍走接口 /browser/close

Java、C#、Go 等语言完全一样,只是换个 HTTP 库发请求、换个语言的 Selenium/CDP 绑定去接管,模型不变。因为对接的本质就是「发 HTTP 请求 + 连调试地址」,不挑语言。

标准调用顺序与容易踩的坑

  1. 确认客户端已启动、本地接口可达(先用工具直接 POST 一下列表接口验证能通)。
  2. 用列表/详情接口拿到目标窗口的 id。
  3. POST 打开窗口,从返回里取调试地址;这里失败多半是窗口 id 不对或客户端没开。
  4. 用调试地址接管(Selenium 填 debuggerAddress / Puppeteer 用 connect),注意 chromedriver 版本匹配。
  5. 跑你的自动化逻辑。
  6. 收尾时通过接口关闭窗口,别只断开脚本连接却把窗口留着——窗口会一直开着占资源。
  • 端口写死:最常见的坑。端口应从客户端配置动态读,硬编码在换机或升级后就失效了。
  • 客户端没开:本地服务不在,接口全部调不通,先确认客户端在运行。
  • 自己 launch 新浏览器:那样绕过了客户端,指纹和代理都不对,等于白做隔离。一定要 connect/接管。
  • chromedriver 版本不匹配:Selenium 接管失败的高频原因,换成与内核匹配的版本。
  • 忘记关窗口:脚本跑完只 disconnect,窗口还开着,多跑几次机器就满了。
注意 用 API 做批量操作时,请遵守目标平台的规则与频率限制,别写成高频骚扰式请求。自动化只是工具,账号安全与合规责任仍在你自己,具体以平台官方最新政策为准。本篇不提供任何规避平台检测的做法。

这些内容不在本篇范围内

不想写代码、想在客户端里用拖拽式流程做自动化,看《有没有自动化/RPA 功能?能批量养号吗》;只是要批量新建窗口、批量导入账号、批量改代理这类在客户端里就能点的操作,看《怎么批量创建、批量导入账号和批量修改窗口》,那些不一定需要写 API。本篇只回答「本地 API 是什么模型、怎么用代码对接自己的程序」这一个问题。所有接口的确切端口、路径、字段与鉴权方式,一律以官方接口文档为准。

同类问题