在Playwright .NET中执行多行JavaScript报错,求正确实现方案
在Playwright .NET中正确执行选中所有复选框的JavaScript代码
错误原因分析
你的代码存在三个关键语法问题:
- 引号嵌套冲突:JavaScript代码中
document.querySelectorAll('input[type='checkbox']')的单引号未正确处理,外层单引号与内部type='checkbox'的单引号重叠,导致JS解析器认为字符串提前终止,引发语法错误。 - 多余的闭合符号:代码末尾多了一组
});,破坏了箭头函数的结构。 - 不必要的
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
相关产品推荐
相关产品推荐

