2014-12-03 34 views
0

我有一个bash脚本使用curl下载一个页面,然后使用grep和sed将html块内的javascript提取到一个文件中,所以在它之后我使用节点来评估和使用下载的javascript。 是一样的东西:从HTML体eval 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作为prereq和xmldoc不解析我的html(它认为它是xml专用的,而不是html)。

不是我想要的,但我试图将grep/sed也作为workarround来执行我的问题。

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

任何人都有任何想法如何从HTML中提取javascript文本脚本并在节点中评估它?

+0

如果xmlDoc中没有解析你的HTML,那么你的HTML是无效的,因此吸。 – 2014-12-03 20:01:28

+0

+ niet-the-dark-absol,是的,我知道,但改变html输入是没有问题的。 html中的标记在html中有效。我需要解压缩它。并评估它。只有这个。 也许有一种方法可以忽略xmldoc中的无效标记? – ton 2014-12-03 20:04:18

+1

当脏HTML是你的问题,也许整理它? :https://www.npmjs.org/package/htmltidy - 否则除了你真的不应该这样做,为什么不使用与bash相同的方法,并使用正则表达式来提取你想要的? (有很好的理由为什么不这样做) – Scheintod 2014-12-03 20:09:21

回答

2

您可以使用类似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 
});