Puppeteer使用XPath选择下拉框option时报表达式无效如何解决
错误原因
XPath表达式中的字符串值必须用引号包裹,你直接将人名变量插入表达式后,Henri Mugnier没有被识别为文本值,而是被当成了无效的语法标识符,所以触发表达式无效报错。
修复代码
以下是修改后的代码,额外加了normalize-space处理,避免选项文本前后带空格、换行导致匹配失败的问题:
const option = (await frame.$x( `//select[@id="wrestler"]/option[normalize-space(text()) = '${holderArr[i].name}']` ))[0]; // 匹配到元素后再取值,避免未匹配到时报错 if (option) { const value = await (await option.getProperty('value')).jsonValue(); // 后续业务逻辑 }
特殊场景兼容
如果你的人名中可能包含单引号,可提前对变量做转义处理,兼容场景示例如下:
const escapedName = holderArr[i].name.replace(/'/g, `', "'", '`); const xpath = `//select[@id="wrestler"]/option[normalize-space(text()) = concat('${escapedName}')]`; const option = (await frame.$x(xpath))[0];
内容的提问来源于stack exchange,提问作者4156
相关产品推荐
相关产品推荐

