前端接口

RobotBrowser SDK 在浏览器中运行,负责弹出执行窗口、连接 WebSocket 实时画面、驱动任务执行。

SDK 集成

页面中引入一个脚本即可:

<script src="//webtask.phpers.cn/static/sdk/robot-browser.js"></script>

加载后全局暴露 RobotBrowser 对象。前端只需调用 run(),签名参数由服务端生成(见后端签名机制)。

run(params, callback)

核心入口。创建执行弹窗、连接 WebSocket、启动任务,实时展示浏览器画面和步骤进度。

参数类型必填说明
paramsobject签名参数包:{ task_id, app_id, timestamp, sign, tuid, client_id }
callbackfunction(err, data)完成回调。与 Promise 二选一
执行流程

弹窗 → create → WS 连接 → execute → WS 实时推送 → 自动查询最终状态

// 服务端按 signature 规则生成 params(含 task_id, app_id, timestamp, sign, tuid, client_id)
var params = {
    task_id:   12345,
    app_id:    'your_app_id',
    timestamp: Math.round(Date.now() / 1000),
    sign:      '...',
    tuid:      'order_123456',
    client_id: '936ebb63059d49edc4bf52ce636f0a00',
};

RobotBrowser.run(params, function(err, data) {
    if (err) return console.error('失败:', err.message);
    console.log('完成:', data.status, data.result);
});

stop(params, callback)

通过 task_id + tuid 停止正在运行的任务(tuid 可能重复,必须携带 task_id 定位)。

参数必填说明
params.task_id任务 ID
params.tuidcreate 返回的 tuid
params.app_id应用 ID
params.timestamp当前时间戳
params.signmd5(app_id + timestamp + app_secret)

closeDialog()

手动关闭当前执行弹窗。任务失败或停止时弹窗不会自动关闭。

RobotBrowser.run(params, function(err) {
    if (err) RobotBrowser.closeDialog();
});

回调数据格式

字段类型说明
statusstringcompleted / failed / stopped
resultobject/null任务执行结果
error_msgstring失败时的错误信息
tuidstring进程唯一标识
current_stepobject/null当前执行的步骤信息

后端接口

后端 REST API 供第三方服务端调用。所有接口通过 MD5 签名 鉴权,对外接口如下。

接口总览

接口方法路径用途
startPOST/api.php/task.process/start直接启动运行(创建+启动一步到位,异步)
sync_startPOST/api.php/task.process/sync_start同步启动运行(阻塞等待完成后直接返回结果)
actionPOST/api.php/task.process/action向保持激活(keep_live)的进程发送命令并取回分支返回值
statusGET/api.php/task.process/status查询进程状态
stopGET/api.php/task.process/stop停止进程

说明create/execute/formSubmit/serverStep 为浏览器 SDK 及调度器内部使用的接口,第三方服务端一般无需直接调用。

Base URL:https://webtask.phpers.cn/api.php,返回值格式 { code:0, data:{...} }

签名机制

公共参数

参数类型必填说明
app_idstring控制台 → SDK 应用管理 获取
timestampintUnix 时间戳,与服务端差超 3600 秒过期
signstringMD5 签名值,md5(app_id + timestamp + app_secret)
tuidstring业务幂等键,同 tuid 重复调用不重复创建

签名算法

所有接口统一签名格式:md5(app_id + timestamp + app_secret)

代码示例

PHP Go Python
<?php
$sign = md5($appId . time() . $appSecret);

start · POST /api.php/task.process/start

直接启动运行。一步完成创建进程+执行,适用于服务端后台主动触发任务的场景。

参数必填说明
app_id应用 ID
task_id任务 ID
timestampUnix 时间戳
signmd5(app_id + timestamp + app_secret)
tuid业务幂等键
client_id指定执行客户端(robot_client.client_id 字符串,非数据库主键 id)
params按任务任务运行参数(任务定义了 params_schema 时必填)

返回:{ tuid, status_app_id, status_timestamp, status_sign }

sync_start · POST /api.php/task.process/sync_start

同步启动运行。阻塞等待任务执行完成后再返回结果,适用于需要直接拿结果的服务端场景(无需轮询 status)。

注意:任务执行期间请求会一直挂起(占用 PHP worker),任务执行时间较长时请适当调大 timeout

参数必填说明
app_id应用 ID
task_id任务 ID
timestampUnix 时间戳
signmd5(app_id + timestamp + app_secret)
tuid业务幂等键
client_id指定执行客户端(robot_client.client_id 字符串,非数据库主键 id)
params按任务任务运行参数(任务定义了 params_schema 时必填,可复用上次默认值)
timeout最大等待秒数(默认 600,0 表示不限制)
steps自定义执行流程。传入则覆盖任务默认流程(store_id 失效)。格式为步骤数组或 JSON 字符串;解析失败返回 steps 格式错误,需为 JSON 步骤数组
keep_active进程执行完成后保留页面的秒数(如 60)。仅本次执行生效、不落库,用于配合 keep_live 步骤在完成后为后续 action 保留页面;0=完成后立即关闭。
steps 覆盖流程说明

默认 sync_start 按任务关联的流程(store_id)执行;传入 steps 后将以你提供的步骤数组为准,任务默认流程不再生效。steps步骤节点数组,也可序列化为 JSON 字符串传递(接口自动 json_decode)。

每个步骤节点字段(对应服务端 StepNode):

  • type:步骤类型标识(与流程编辑器中可选步骤类型一致,存于 step_types,如 js / keep_live / call_flow 等)
  • params:步骤参数对象,字段随 type 不同而不同
  • return_var(可选):将本步返回值存入该变量名,供后续步骤引用或最终 result 读取
  • branches(可选):控制类步骤(如条件 / 循环)的分支配置
  • label(可选):步骤标签,仅用于展示

可用步骤类型(来自 step_types)

自定义 steps 时,每个节点的 type 须填下表中的类型标识params 按对应参数填写。下表由 step_types 表动态生成(仅列出启用中的步骤),库里新增 / 修改步骤类型后刷新本页即可同步。

send_mail 发送邮件 server

通过SMTP发送邮件

参数类型说明必填
tostring收件人
subjectstring主题
bodytextarea正文

var 定义变量 control

定义变量,后续步骤可用{$var.变量名}引用

参数类型说明必填
fieldinput变量名
remarktextarea备注
valueinput

navigate 打开页面 action

导航到指定URL

参数类型说明必填
urlinputURL

click 点击元素 action

点击页面元素

参数类型说明必填
selectorinput选择器
forceswitch强制点击

set_var 设置变量 control

修改已定义变量的值(未定义会报错)

参数类型说明必填
fieldinput变量名
valueinput新值

input 输入文本 action

在输入框中填写文本

参数类型说明必填
selectorinput选择器
valueinput输入值
press_enterswitch回车确认
clearswitch先清空

screenshot 截图 action

截取页面截图

参数类型说明必填
full_pageswitch全页截图
selectorinput元素选择器(可选)

wait 等待 control

等待指定时间

参数类型说明必填
msnumber等待(ms)

evaluate 执行JS action

在页面中执行JavaScript

参数类型说明必填
scripttextareaJS代码

exists 元素检测 control

检测指定元素是否存在

参数类型说明必填
selectorinput选择器
visibleswitch必须可见
timeoutnumber超时(ms)
nameinput变量名(可选)

read 读取元素 action

读取指定元素的内容文本

参数类型说明必填
selectorinput选择器

rich_input 富文本输入 action

在富文本编辑器中设置HTML内容

参数类型说明必填
selectorinput选择器
htmltextareaHTML内容
img_up_urlinput图片上传地址
url_attrinput上传返回URL路径
up_datainput上传附加参数(JSON)
upfileinput上传文件字段名
ok_pic_strinput上传成功标识

get_cookies 获取Cookie action

获取浏览器当前的Cookie

参数类型说明必填
domaininput域名(可选)

save_state 保存状态 action

保存浏览器登录状态(Cookie/localStorage)

(该步骤无额外参数,params 传 {} 即可)

close 关闭页面 action

关闭当前浏览器进程,释放资源

(该步骤无额外参数,params 传 {} 即可)

request HTTP请求 action

从浏览器发起HTTP请求,自动携带Cookie

参数类型说明必填
urlinputURL
methodselect请求方法
headerstextarea请求头
bodytextarea请求体
return_bodyswitch返回响应体
is_jsonswitchJSON解析

drag 拖拽元素 action

拖拽页面元素指定方向和距离

参数类型说明必填
selectorinput选择器
directionselect方向
distancenumber距离(px)

if 条件判断 control

根据条件判断执行不同分支,支持嵌套步骤

参数类型说明必填
variableinput变量
compareselect比较方式
valueinput对比值

loop 循环 control

循环执行一组步骤,支持按次数或列表循环

参数类型说明必填
variableinput循环变量
frominput起始值
toinput结束值
stepnumber步长

if_switch 分支判断 control

根据变量值匹配分支执行,支持默认分支(else)

参数类型说明必填
variableinput变量

break 退出循环 control

退出当前最内层循环

(该步骤无额外参数,params 传 {} 即可)

end 结束程序 control

结束整个流程,可选择正常结束或报错退出

参数类型说明必填
exit_typeselect退出类型
exit_notetextarea退出备注

call_flow 调用函数 control

调用另一个任务作为子流程执行

参数类型说明必填
flow_idselect选择函数
paramstextarea参数

return 函数返回 control

提前退出当前函数,返回调用处继续执行

参数类型说明必填
return_notetextarea返回说明

jump_flow 流程跳转 control

跳转到子流程执行

参数类型说明必填
flow_idselect选择子流程
paramstextarea参数

sync_form 异步表单 action

向前端发送定义的表单,用户填写后提交,表单数据返回给流程继续执行

参数类型说明必填
titleinput表单标题
timeoutnumber超时(秒)

el_switch 元素分支 control

遍历分支检测元素可见性,进入第一个可见元素的分支

(该步骤无额外参数,params 传 {} 即可)

print 调试输出 control

将内容输出到SDK界面显示,支持{$变量}

参数类型说明必填
contenttextarea内容

request_server 网络请求 go_server

发送HTTP请求并获取响应(支持GET/POST/PUT/DELETE/PATCH)

参数类型说明必填
urlinput请求URL
methodselect请求方式
headerstextarea请求头
content_typeinputContent-Type
bodytextarea请求体
timeoutinput超时(秒)
is_jsonswitchJSON解析

huakuai_check 滑块验证 通用

识别滑块验证码缺口位置并模拟人类拖拽(通过 ddddocr 识别,物理轨迹拖拽,支持重试机制)

参数类型说明必填
qk_selectorinput缺口图选择器
bg_selectorinput背景图选择器
el_selectorinput滑块选择器
toleranceinput偏移修正
rateinput比例因子
iframeinputiframe限定
max_retryinput最大重试

vosk 语音识别 lib_server

调用本地语音识别服务,识别录音中的数字并返回

参数类型说明必填
audio_urlinput录音地址

keep_live 保持激活 control

进程保持激活,接收外部 action 命令执行对应分支(分支名即调用别名)

参数类型说明必填
timeoutinput等待超时(秒)

ocr_read OCR识别 action

识别图片中的文字(支持截图元素、Base64图片、远程图片URL)

参数类型说明必填
selectorinput元素选择器
image_datainputBase64图片
image_urlinput图片URL
input_selectorinput识别后填入输入框

live_preview 实时预览 action

展示实时浏览器画面,等待扫码或元素变化后自动结束

参数类型说明必填
watch_selectorinput元素选择器
timeoutnumber超时(秒)
titletext

collect_list 采集列表 action

从页面容器中采集列表数据,支持多个字段

参数类型说明必填
containerinput列表选择器
notify_urlinput回调URL
datastextarea采集字段

clear_cache 清除缓存 action

清除当前进程浏览器的所有Cookie与localStorage数据

(该步骤无额外参数,params 传 {} 即可)

php_eval PHP代码 server

编写 PHP 代码并获取执行结果(支持 {$returns.xxx} / {$config.xxx} / {$global.xxx} 变量替换)

参数类型说明必填
codetextareaPHP代码

示例——用 steps 直接指定"执行 JS 取页面标题长度",替代任务默认流程:

{
  "steps": [
    {
      "type": "js",
      "return_var": "js",
      "params": { "code": "return document.title.length" }
    }
  ]
}

数组与 JSON 字符串两种传法等价。例如同样可传 steps='[{"type":"js","return_var":"js","params":{"code":"return document.title.length"}}]';多个步骤按数组顺序依次执行,返回结构见下文。

返回结构说明:

{
  "code": 0,
  "msg": "success",
  "data": {
    "tuid": "test",            // 业务幂等键(原样返回)
    "status": "completed",      // 终态:completed 成功 / failed 失败 / stopped 被停止
    "result": {                 // 任务返回值(各步骤返回变量汇总)
      "js": 2,                  // 例:任务里某步骤返回变量 js = 2
      "cookie": "abc123"        // 例:另一返回变量
    },
    "error_msg": ""             // status=failed 时才有值,为失败原因
  }
}

JS 读取示例——以任务返回变量 js = 2 为例:

const data = resp.data;                      // 或 resp.json().data
if (data.status === 'completed') {
    const js = data.result.js;                // 直接读取变量 js,得到 2
    console.log('js =', js);                  // 输出: js = 2
} else {
    console.log('失败:', data.error_msg);
}

若任务使用"返回值变量"(如 return_var=funca),返回结构为 { "funca": { "returns": { ... } } },读取方式:data.result.funca.returns.变量名

action · POST /api.php/task.process/action

向处于 保持激活(keep_live)状态的进程发送命令,触发对应分支执行,同步等待分支执行完并返回分支的返回值。适用于"进程常驻页面、外部按需下发 JS 操作或读取数据"的场景。

前提:进程必须运行到 keep_live 步骤且保持激活状态(status 接口可见 current_step.type = "keep_live")。

参数必填说明
app_id应用 ID
task_id任务 ID
tuid进程 tuid
timestampUnix 时间戳
signmd5(app_id + timestamp + app_secret)
action分支别名(即 keep_live 步骤中配置的分支名,如 send_msg
params命令参数(JSON 对象),分支内用 {$action.xxx} 引用
timeout等待秒数(默认 0=不设限,分支执行时长由分支内步骤自身超时控制)

返回:{ code:0, data:{ 分支返回值 } }——分支执行后新增/修改的返回变量。例如分支内步骤设了 return_var=text 且返回"你好",则返回 { code:0, data:{ text:"你好" } }

退出:调用 action=exit 可退出 keep_live 继续执行后续步骤;也可用 stop 接口停止进程。

status · GET /api.php/task.process/status

查询进程的当前状态和结果。

注意:status / stop / action 接口仅校验签名正确性、不校验时间戳过期(长时间运行的任务签名由服务端生成,无法刷新),与公共参数表中"3600 秒过期"规则不同。

参数必填说明
task_id任务 ID(tuid 可能重复,用于精确定位)
app_id应用 ID
tuid进程 tuid
timestampUnix 时间戳
signmd5(app_id + timestamp + app_secret)

返回:{ tuid, status, current_step, result, error_msg }

stop · GET /api.php/task.process/stop

停止正在运行或等待中的进程。

参数必填说明
task_id任务 ID(tuid 可能重复,用于精确定位)
app_id应用 ID
tuid进程 tuid
timestampUnix 时间戳
signmd5(app_id + timestamp + app_secret)