如何不使用eval从字符串中解析Selenium的Key类对应按键值
Selenium Key字符串转实际按键值(无eval实现方案)
Selenium 导出的Key本身是标准JavaScript对象,你可以直接截取Key.前缀后的属性名,通过方括号访问对象属性的方式获取对应按键值,完全替代eval实现同等功能,从根源规避安全风险。
修改后可直接运行的代码如下:
const {Builder, By, Key, until} = require('selenium-webdriver'); // 其余原有业务逻辑保持不变 const obj = {val: 'Key.SPACE'} if(obj.val.startsWith('Key.')) { // 截取"Key."后面的按键名称 const keyProp = obj.val.slice(4); // 增加属性存在校验,避免传入非法Key名时得到无效值 if(Object.hasOwn(Key, keyProp)) { obj.val = Key[keyProp]; } else { // 可根据业务需求调整异常处理逻辑,比如设置默认值、抛出明确错误 throw new Error(`未定义的按键名称:${keyProp}`); } } // 后续sendKeys调用无需修改 (...).sendKeys(obj.val);
方案优势
- 完全消除了
eval带来的任意代码执行安全隐患 - 增加了合法性校验,出错时排查成本更低
- 执行效率远高于
eval调用,符合JS最佳实践
内容的提问来源于stack exchange,提问作者Vadim
相关产品推荐
相关产品推荐

