为了账号安全,请及时绑定邮箱和手机立即绑定

在不使用 eval() 的情况下评估字符串

在不使用 eval() 的情况下评估字符串

慕盖茨4494581 2021-09-30 09:38:03
我正在创建一个“通用”网络抓取工具,它将抓取任何具有条目列表的页面。我想从配置中驱动它应该提取的标签。具有以下配置的示例:{     name : "price",    valueJQueryExpression : ".mt9 > .mt7.b"},...我正在解析以下方式:const $ = require('cheerio');let jquery = getQuery("price");let keys = $(jquery);但是,我有更棘手的解析器要处理,例如。那个:let location = $('.mt9 > .b', html).not('.mt5').not('.mt7').text().trim()在这种情况下,我认为使用 aneval()并在配置中传递完整的表达式。但是,由于安全问题,不建议这样做。你有什么关于以不同方式处理这个问题的建议吗?
查看完整描述

2 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

您应该可以在这里使用:not伪类。请尝试以下操作:


$('.mt9 > .b:not(.mt5):not(.mt7)', html).text().trim()

它类似于 jQuery,其中指定的选择器:not()将用于从匹配项中排除元素。


您可以在下面看到它的实际效果:


.mt9 > .b:not(.mt5):not(.mt7) {

  color: red;

}

<div class="mt9">

  <div class="b">This should be red</div>

  <div class="b mt7">This should not be red</div>

  <div class="b mt5">This should not be red</div>

</div>


查看完整回答
反对 回复 2021-09-30
?
慕姐8265434

TA贡献1813条经验 获得超2个赞

var command = 'console.log("Hello")';

var s = document.createElement("script");

s.textContent = command;

document.head.appendChild(s);


查看完整回答
反对 回复 2021-09-30
  • 2 回答
  • 0 关注
  • 164 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信