接上一回,我们大致梳理了淘宝封杀selenium的思路,找到核心的参数ua,并抛出疑问:为什么ua每次都不一样,并且随着使用次数次数增加长度越来越长。
关于为什么每次获取的ua参数长度都不一样,有个网友留言让我豁然开朗:
`window.__defineGetter__('_f_', function (){return new Date()})
原理就是给这个属性绑定一个输出前的私有方法,每次在获取该属性的时候执行该私有方法,从而达到每次输出的值都不一样。
受此启发,然后在仔细分析window对象,找到如下两个关键信息
get _n:ƒ s() arguments:Arguments [callee: ƒ, Symbol(Symbol.iterator): ƒ] caller:ƒ () length:0 name:"s" prototype:{constructor: ƒ} __proto__:ƒ () [[FunctionLocation]]:115.js?d=24:formatted:559 [[Scopes]]:Scopes[2] set _n:ƒ () arguments:null caller:null length:0 name:"" prototype:{constructor: ƒ} __proto__:ƒ () [[FunctionLocation]]:115.js?d=24:formatted:17214 [[Scopes]]:Scopes[3]
有get _n方法和set _n()方法,其中get方法对应115.js文件的559行;set方法对应115文件的17214行。
<