如何获取 html 里指定 script 的指定内容?

2023-05-08 21:31:31 +08:00
 KevinDo2

获取到某网站的源 html 内容,里面有很多 Script 标签。 其中一个 Script 标签执行了为变量赋值的操作。

 <script>
      foo.jsonData = {"name":"Bar"}
 </script>

请问有什么合理且高效的办法获取{"name":"Bar"}这个内容?

762 次点击
所在节点    问与答
5 条回复
kernelpanic
2023-05-08 21:45:24 +08:00
```
html.match(/foo.jsonData = (\{[^}]+})/)[1]
```
alukongfu
2023-05-09 09:34:07 +08:00
jazzg62
2023-05-09 11:23:25 +08:00
```ts
import { parse } from '@babel/parser';
import traverse from '@babel/traverse';
import generator from '@babel/generator';
import * as types from '@babel/types';
let obj = 'foo';
let pro = 'jsonData';
let script = `let foo = {}
foo.jsonData = {"name":"Bar"}
foo.aa = '123';
`;
let ast = parse(script, { sourceType: 'script' });
let res = '';
traverse(ast, {
AssignmentExpression(path) {
let node = path.node;
if(types.isMemberExpression(node.left) ){
let object = node.left.object;
let property = node.left.property;
if(types.isIdentifier(object) && object.name == obj && types.isIdentifier(property) && property.name == pro){
res = generator(node.right).code;
}
}
},
});

console.log(res);
```
jazzg62
2023-05-09 11:24:56 +08:00
也可以用上面 ast 的形式来查找 foo.jsonData 的赋值操作
KevinDo2
2023-05-09 14:44:51 +08:00
@jazzg62 学到了!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/938398

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX