JavaScriptではnew Functionを使って文字列スティッチング式を実行します.
1220 ワード
作者@zwhu原文章@github
最近はnodeで爬虫類を書いています.アナログ登録ともいいます.あるサイトが戻ってきたHTMLに作成ページtokenのスクリプトを挿入しました.
このHTMLの構造は大体似ています.
最近はnodeで爬虫類を書いています.アナログ登録ともいいます.あるサイトが戻ってきたHTMLに作成ページtokenのスクリプトを挿入しました.
このHTMLの構造は大体似ています.
(function (w) { w.token = (function () { // .... // token return token; })();; })(window);
首先拿到这个页面,然后获取script标签的表达式字符串,剩下的事就是怎样执行表达式字符串,并获取token。
在此处的情景中用eval也是挺不错的选择,但是既然 JS 不推荐这种用法,那我们就换成 new Function 来做。
看下 new Function 的用法如下
new Functionは関数を返します.例えばnew Function ([arg1[, arg2[, ...argN]],] functionBody)
fn = new Function('a', 'b', 'return a + b')
は、関数オブジェクトを返します.そして、new Functionを使用して取得した表現を実行してtokenに戻ります.fn = function(a, b) { return a + b }
作成したこの関数は、関数体の中ですぐに式を実行するためのパラメータとして、最も内側の関数に導入されます.だから最後に実行する時return window.tokenはtokenの内容を獲得します.fn = new Function('window', functionBody + ';return window.token') var token = fn({}) console.log(token)