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

在Playwright .NET中执行多行JavaScript报错,求正确实现方案

在Playwright .NET中正确执行选中所有复选框的JavaScript代码

错误原因分析

你的代码存在三个关键语法问题:

  1. 引号嵌套冲突:JavaScript代码中document.querySelectorAll('input[type='checkbox']')的单引号未正确处理,外层单引号与内部type='checkbox'的单引号重叠,导致JS解析器认为字符串提前终止,引发语法错误。
  2. 多余的闭合符号:代码末尾多了一组});,破坏了箭头函数的结构。
  3. 不必要的async声明:你的代码中没有异步操作,添加async属于冗余写法,反而可能引发潜在问题。

正确实现代码

以下是几种修复后的可行方案:

方案1:修复引号与结构(保留原循环逻辑)

await page.EvaluateAsync(@"() => { 
    var checkboxes = document.querySelectorAll('input[type=""checkbox""]');
    for (var i = 0; i < checkboxes.length; i++) {
        if (checkboxes[i].type == 'checkbox')
            checkboxes[i].checked = true;
    }
}");
  • 说明:在C#的@字符串中,用""表示JavaScript中的单个双引号,避免了单引号嵌套冲突;移除了多余的});和不必要的async。

方案2:简化为forEach遍历

await page.EvaluateAsync(@"() => {
    document.querySelectorAll('input[type=""checkbox""]').forEach(checkbox => {
        checkbox.checked = true;
    });
}");
  • 说明:利用forEach简化循环逻辑,同时因为选择器已经筛选出所有type="checkbox"的元素,可直接省略if判断。

方案3:更简洁的写法

await page.EvaluateAsync(@"() => {
    [...document.querySelectorAll('input[type=""checkbox""]')].forEach(cb => cb.checked = true);
}");
  • 说明:通过扩展运算符将NodeList转为数组,写法更简洁,效果与上述方案一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 15:54:25