javascript - 评估 html 正文中的 javascript 文本

标签 javascript html node.js bash sed

我有一个使用curl下载页面的bash脚本,然后使用grep和sed将html block 内的javascript提取到文件中,所以在它之后我使用node来评估和使用下载的javascript。 是这样的:

curl 'http://...' ... | grep -E "(varxpto\(|fnxpto)" | sed 's|<[/]\?script[^>]*>||g' > fn.js  
x="$(node -pe "var fs = require('fs'); eval( fs.readFileSync('fn.js')+'' ); 
var val=fnxpto('${PW}'); val;")"

它就像使用 bash 的魅力一样。但我需要将其公开为服务,因此我尝试在 Nodejs 中执行此操作。

我的问题是...该怎么做?我尝试了 xpath,但似乎它需要 xmldoc,因为先决条件和 xmldoc 不解析我的 html(它认为它是 xml 独有的,而不是 html)。

不是我想要的,但我也尝试执行 grep/sed 作为我的问题的解决方法。

注意:我使用 require('http') 恢复了 html 文本,我在这里不需要帮助。仅从 html 中提取 javascript 并导入/评估它。

有人知道如何从 html 中提取 javascript 文本脚本并在 Node 中对其进行评估吗?

最佳答案

您可以使用类似 cheerio 的内容解析 HTML,然后查询文档中的脚本标签:

// `data` is the entire string response from `http.request()`
var cheerio = require('cheerio'),
    $ = cheerio.load(data);

$('script').each(function(i, elem) {
  console.dir($(this).text());
  // do eval() or whatever else here
});

关于javascript - 评估 html 正文中的 javascript 文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27280249/

相关文章:

javascript - HTML:无法在浏览器上显示?

javascript - 删除数组中的重复对象,保留具有最大属性值的对象

javascript - servlet中的doGET不写在html页面中

node.js - 错误 : ENOENT: no such file or directory, 打开 'dist/index.html'

node.js - Jasmine:测试一个方法是否被另一个类的另一个方法调用

Node.js Express、handlebars - 获取数组的元素

javascript - 如何从服务器获取嵌套路由 ember 2.3.0 的数据

javascript - for await 给出 SyntaxError : Unexpected reserved word inside a async function

html - 如何在网站中嵌入 Google Drive 文件夹

javascript - 从 div 内的 p 标签中选择一个值