最新消息:20210917 已从crifan.com换到crifan.org

【未解决】汽车之家车型车系数据:想办法破解js和css加密的文字显示

JS crifan 717浏览 0评论
折腾:
【未解决】汽车之家车型车系数据:有些参数字段的值包含span特殊标签
期间,对于:
https://car.autohome.com.cn/config/spec/1001862.html#pvareaid=3454541
html是:
<div>国IV/<span class="hs_kw48_configpB"></span>V</div>
很明显:缺少部分的文字,此处是:京
而是通过css的特殊表示:
.hs_kw48_configpB::before {
  content: "京";
}
去实现的
国IV/京V
此处实在无法规避了。
只能想办法去找找如何破解此处的:
返回的html中,js运行后,生成的css,其中才有我们要的文字
且最好不要运行js,否则爬取速度很慢
实在不行,再去运行js

现在只能:不开启js,去从返回的html中,看看能否找到破解思路
debug/金杯_阁瑞斯_1001862_fullHtml.html
找到相关的
    <script>
        (function (Ah_) {
            function Sc_() {
                'return Sc_';
                return '万';
            }
            var vW_ = '京';
            var FC_ = function () {
                'return FC_';
                return '价';
            };
            var Qg_ = '元列制';
。。。
然后开始分析

{
                        "id": 1311,
                        "name": "环保标准",
                        "pnid": "1_-1",
                        "valueitems": [{
                            "specid": 1001862,
                            "value": "国IV/<span class='hs_kw48_configvS'></span>V"
                        }, {
                            "specid": 1001861,
                            "value": "国IV/国V"
                        }, {
                            "specid": 1001860,
                            "value": "国IV/国V"
                        }, {
                            "specid": 1001858,
                            "value": "国IV/国V"
                        }, {
                            "specid": 1001857,
                            "value": "国IV/国V"
                        }, {
                            "specid": 1001865,
                            "value": "国IV/<span class='hs_kw48_configvS'></span>V"
                        }, {
                            "specid": 1001855,
                            "value": "国IV/国V"
                        }, {
                            "specid": 1001854,
                            "value": "国IV/国V"
                        }, {
                            "specid": 1001864,
                            "value": "国IV/<span class='hs_kw48_configvS'></span>V"
                        }, {
                            "specid": 1001852,
                            "value": "国IV/国V"
                        }, {
                            "specid": 1001851,
                            "value": "国IV/国V"
                        }, {
                            "specid": 1001863,
                            "value": "国IV/<span class='hs_kw48_configvS'></span>V"
                        }]
                    }
其中的:
国IV/<span class='hs_kw48_configvS'></span>V
中的:
<span class='hs_kw48_configvS'></span>
已知是:

现在就看,如何,能否,不运行js的前提下,找到对应关系了。

搜:
hs_kw48_configvS
hs_kw _config 
汽车之家 hs_kw _config
反爬虫破解系列-汽车之家利用css样式替换文字破解方法 – Mr.Dolphin – 博客园
html中搜:
::before
找到:
            function $RuleCalss1$() {
                return '::before { content:'
            }
            var Ec_ = function () {
                'return Ec_';
                return '前';
            };
搜:
RuleCalss1
找到:
    <script>
        (function (io_) {
            function $InsertRule$($index$, $item$) {
                $sheet$['' + wq_() + xK_() + eP_() + Of_ + wJ_() + yu_('e')]($GetClassName$($index$) +
                $RuleCalss1$() + '"' + $item$ + '" }', 0);
                var $tempArray$ = $GetElementsByCss$($GetClassName$($index$));
                for (x in $tempArray$) {
                    try {
                        $tempArray$[x].currentStyle = '';
                    } catch (e) {}
                }
            }

            function $RuleCalss1$() {
                return '::before { content:'
            }


            function $RuleCalss1$() {
                return '::before { content:'
            }

            function $InsertRule$($index$, $item$) {
                $sheet$['' + dF_ + Ke_() + Pm_() + hJ_() + bE_() + CM_() + kA_()]($GetClassName$($index$) +
                    $RuleCalss1$() + '"' + $item$ + '" }', 0);
                var $tempArray$ = $GetElementsByCss$($GetClassName$($index$));
                for (x in $tempArray$) {
                    try {
                        $tempArray$[x].currentStyle = '';
                    } catch (e) {}
                }
            }

            function $RuleCalss1$() {
                return '::before { content:'
            }

            function $InsertRule$($index$, $item$) {
                $sheet$['' + op_('in') + uP_() + yG_() + vF_() + Al_ + (function () {
                    'return PC_';
                    return 'u'
                })() + (function (dY__) {
                    'return dY_';
                    return dY__;
                })('le')]($GetClassName$($index$) + $RuleCalss1$() + '"' + $item$ + '" }', 0);
                var $tempArray$ = $GetElementsByCss$($GetClassName$($index$));
                for (x in $tempArray$) {
                    try {
                        $tempArray$[x].currentStyle = '';
                    } catch (e) {}
                }
            }
有多个:
RuleCalss1
InsertRule
但是很难静态分析出结果
感觉最后还是最好执行js代码
https://github.com/dytttf/antispider/blob/master/autohome.py
爬虫实战:汽车之家配置页面 破解伪元素和混淆JS – Grom – 博客园
看起来是:静态分析可以搞懂逻辑?
然后就可以用代码实现了
搜:
rulePosList
的确有这个关键字
那就自己分析代码 + 参考上面那个帖子
看看能否分析出逻辑
重新搜:
vW_
且匹配大小写,找到,此处只有一处调用
。。。
                })()]('' + Sc_() + vW_ + FC_() + '体供' + (function () {
                        'return gA_';
                        return '保'
。。。
另外直接搜:
hs_kw48_configvS
中的
vS
是搜不到的
参考帖子,去搜:
FillDicData
不过后来看到:
“文中部分解析直接将变量丢进了JS里执行,”
看来也要运行js的??
此处,如果最后实在不行,要是运行js,也是可以的。
但是不确定:运行后的js中,如何提取出所需的css部分
这样才能从css中找到我们要的文字

转载请注明:在路上 » 【未解决】汽车之家车型车系数据:想办法破解js和css加密的文字显示

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
92 queries in 0.179 seconds, using 23.33MB memory