You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Playwright-Rust调用JS脚本时数组解构结果异常问题

问题原因与解决方法

核心原因

playwright-rust的evaluate方法仅支持传递单个参数给JS脚本,这个参数会被序列化为JSON后作为JS函数的第一个参数传入。你当前传入的Vec<String>会被当作一个整体数组传递给JS的search函数,而不是把数组内的两个元素分别作为独立参数传入。

所以JS函数里的...args收集到的是[ [session_id, url] ](一个包含数组的数组),自然args.length为1,解构时url就会是undefined。

解决方案

有两种可行的修改方式:

方式1:修改JS函数,直接接收数组参数并解构

调整JS代码,让函数接收单个数组参数,再解构出需要的值:

async function search(args) {
    const [session_id, url] = args;
    console.log(args);
    console.log(args.length);
    console.log(url);
}

Rust代码保持不变,这样JS函数就能正确拿到session_id和url。

方式2:用元组包装参数,JS函数接收独立参数

如果希望JS函数直接接收两个独立参数,可以在Rust里用元组包装参数,同时修改JS函数的参数定义:

  • Rust代码:
let args = (session_id.clone(), build_url);
let json_result = tab
    .evaluate::<(String, String), serde_json::Value>(SEARCH, args)
    .await?;
  • JS代码:
async function search(session_id, url) {
    console.log(session_id, url);
    console.log(arguments.length); // 此时会输出2
}

内容的提问来源于stack exchange,提问作者foragerDev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 23:50:19