跳转到内容

执行JavaScript

执行JavaScript 用于在当前页面或指定元素上运行一段 JavaScript 脚本,并可把脚本返回值保存到变量。它适合标准指令难以覆盖的高级场景,例如读取复杂 DOM 数据、触发自定义事件、调用页面上的 JS 函数等。

指令标识:ExecuteJavascript
指令类型:网页指令
指令描述:在指定元素或页面上执行 JavaScript 脚本,可返回结果

工作流支持「可视化编排」和「代码编排」两种创建方式。执行JavaScript 在两种方式里都能用,核心业务参数一致,区别主要是你通过界面配置,还是通过 Python 脚本配置。

方式怎么用适合人群
可视化编排(推荐先学)拖入「执行JavaScript」节点,填写脚本、可选元素选择器和输出变量大多数用户,零代码,适合快速搭建和调试
代码编排(Python)在脚本中调用 bots.executeJavascript(expression="...", outKey="result")熟悉代码、需要复用脚本或批量生成流程的用户

第一次使用建议先用可视化编排跑通,再迁移到 Python 代码编排。下方「参数说明」同时给出界面字段和代码参数名,方便两种方式对应。

  • 标准指令读不到的数据,需要用 JS 直接从 DOM 或全局对象里取。
  • 需要触发页面自定义事件、调用页面已有的 JS 方法。
  • 需要对元素做特殊处理,例如移除遮罩、修改属性、滚动定位。

脚本会在浏览器页面环境里执行,能访问 documentwindow 等。如果填写了元素选择器,脚本的第一个参数就是该元素。

  • 页面已经加载到脚本要操作的状态。
  • 脚本语法正确,能在浏览器控制台单独跑通。
  • 如果要拿返回值,记得配置输出变量;脚本要用 return 返回结果。
  • 如果脚本针对某个元素,确认元素已经出现,必要时先加等待节点。
执行JavaScript

下面用一个常见场景演示:读取页面标题并保存为变量

  1. 确认页面已经打开并加载完成。
  2. 添加 执行JavaScript 节点。
  3. 脚本 中填写要执行的代码,例如:
return document.title;
  1. 将结果保存至 填写变量名,例如 pageTitle
  2. 运行后查看变量值是否与页面标题一致。
界面名称代码属性名类型必填默认值说明
JavaScript脚本expressionString-要执行的 JavaScript 代码。需要返回值时用 return 返回。
元素选择器selectorString-填写后脚本作用于该元素,元素作为脚本第一个参数传入;为空则在整页上下文执行。
脚本入参paramsString-传给脚本的参数,支持 JSON 字符串或普通字符串,会作为脚本的入参传入。
iframe 页面定位器frameSelectorString-高级选项,目标元素在 iframe 内时填写。
查找元素高级配置findElementOptionsJSON-高级选项,JSON 格式,可在其中配置查找元素的超时时间等参数(如 {"timeout": 5000}),单位毫秒。
界面名称代码属性名类型必填说明
将结果保存至outKeyString保存脚本返回值。返回对象/数组会序列化为 JSON 字符串。未配置输出变量时,脚本即使有返回值也会被丢弃。
  • 执行JavaScript 节点运行结束后状态为成功。
  • 运行日志中没有参数缺失、超时或执行失败等错误。
  • 如果配置了输出变量,后续节点能够读取到符合预期的结果。
  • 后续节点能够继续执行,流程没有因为该节点异常中断。
现象 / 报错原文可能原因处理建议
拿不到返回值没配置输出变量,或脚本没有 return配置「将结果保存至」,并在脚本里用 return 返回结果
日志提示脚本报错JS 语法错误或访问了不存在的对象先在浏览器控制台单独运行脚本调通,再粘贴回来
配置了元素选择器但输出为空元素没找到先加等待节点确认元素出现;找不到元素时输出会被置空
返回值是 [object Object] 之类返回了复杂对象引擎会把对象序列化为 JSON 字符串,可在后续节点解析

代码编排以 Python 为主。运行上下文由代码编排模板创建,示例里只需要关注业务指令本身。

# 在整页执行脚本并取返回值
result = bots.executeJavascript(
expression="return document.title;",
outKey="pageTitle",
)
print(result)

针对某个元素执行脚本(元素作为脚本第一个参数):

bots.executeJavascript(
selector="//*[@id='app']/div[1]",
expression="el => el.scrollIntoView();",
)

如果你想在工作流中通过节点动态编排指令,可使用 执行指令(XML)节点。

A: 在脚本里用 return 返回,并在「将结果保存至」配置输出变量。如果返回的是对象或数组,会被序列化成 JSON 字符串保存。

Q2:填了元素选择器,脚本怎么拿到这个元素?

Section titled “Q2:填了元素选择器,脚本怎么拿到这个元素?”

A: 脚本会以该元素作为第一个参数执行,可以写成箭头函数形式,例如 el => el.click()

Q3:脚本能访问 windowdocument 吗?

Section titled “Q3:脚本能访问 window、document 吗?”

A: 可以。脚本运行在页面环境里,能访问 windowdocument 等浏览器全局对象。