2014-12-03 70 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 
});