}
</script>
<script nonce="1Teo6dnz69YW0soIPJ1sXg">
if (window.ytcsi) {
window.ytcsi.tick('pdc', null, '');
}
</script>
<script nonce="1Teo6dnz69YW0soIPJ1sXg">
var ytInitialData = {
"responseContext": {
"serviceTrackingParams": [{
"service": "CSI",
"params": [{
分类讨论 硬编码值(
Hardcoding
) 和 环境依赖值(Environment-Specific
)简单先陈述一下,按照题主展示的那一部分的代码情况:
如果要获取 对象数据 推荐使用 2.词法分析
如果要获取
window
等运行时才存在的变量 只能 使用 3.环境编译如果嫌麻烦,可以直接使用最后一种方法,因为是实际运行后获取数值的,所以也是最 通用的
那么下面开始具体分析方案
硬编码
即在静态的代码中定义的变量,这种相对容易获取,使用词法分析、正则或者其他字符串匹配方法都可以(相对推荐的是 词法分析框架 ,比如
slimit
)1.正则(简单情况)
字符串匹配,不适合应对代码复杂的情况,但捕获简单的赋值语句还是相对容易的:
最终的输出结果是:
2.词法分析
这种方式会真正意义上去 解析
js
代码,抽象为AST
语法树,从而应对复杂情况,比如slimit
框架这种情况比较适用于捕获复杂的数据类型或者在复杂语句结构里的变量
环境依赖(通用)
如果需要捕获一些运行时才存在的值,比如
windows
对象,BOM
、DOM
等浏览器接口,那上述做法都没办法生效了只能考虑运行一下本地浏览器环境获取(比如通过
selenium
),使用前记得注意浏览器驱动与浏览器版本,还有selenium
的版本,我的是4.1.1
: