我用nodejs和cheerio抓取网站。如何获得Test
的值。
这是我正在抓取的代码。
<body>
<div>Hello</div>
<script>
var Test = "www.example.com";
</script>
</body>
如何获取变量Test
的值?
答案 0 :(得分:1)
您首先需要获取脚本标记的原始内容(您可以使用cheerio),一旦您在标记内部使用了javascript,就可以选择:
var value = /\sTest\s*=\s*"([^"]*)"/.exec(js)[1]
对于您分享的示例,AST如下所示:
var ast = {
"type": "Program",
"body": [
{
"type": "VariableDeclaration",
"declarations": [
{
"type": "VariableDeclarator",
"id": {
"type": "Identifier",
"name": "Test"
},
"init": {
"type": "Literal",
"value": "www.example.com",
"raw": "\"www.example.com\""
}
}
],
"kind": "var"
}
],
"sourceType": "script"
}
// you can use something smarter to look for "Test" variable declaration here
var value = ast.body[0].declarations[0].init.value;
// assumes js code is declaring a variable named "Test"
var value = eval(js + '; Test;');
// a slightly better approach that prevents adding variables to the global scope:
var value = eval('(function(){ ' + js + '; return Test; })();')
大警告,如果您对该脚本标记的内容没有完全信任,请不要使用此eval方法,您将作为node.js应用的一部分运行,创建脚本注入漏洞的一种形式。