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
相关产品推荐
相关产品推荐

