python selenium破解极验3滑动验证码,解决物理公式不可用的问题
一、采用物理加速度公式算法
def get_track(self, distance): """ 获取滑块移动轨迹的列表 :param distance: 第二个缺块的左侧的x坐标 :return: 滑块移动轨迹列表 """ track = [] current = 2 mid = distance * 1 / 2 mid0 = distance * 1 / 4 mid1 = distance * 1 / 8 t = 0.2 v = 50 distance += 10 # 使滑块划过目标地点, 然后回退 while current < (distance - 10): if current < mid1: a = random.randint(4, 10) elif current < mid0: a = -random.randint(6, 8) elif current < mid: a = random.randint(4, 10) v0 = v v = v0 + a * t s = v0 * t + 0.5 * a * t * t current += s a = -random.randint(6, 7) track.append(round(s))
<span class="token keyword">for</span> i <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">:</span> track<span class="token punctuation">.</span>append<span class="token punctuation">(</span><span class="token operator">-</span>random<span class="token punctuation">.</span>randint<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">for</span> i <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">:</span> track<span class="token punctuation">.</span>append<span class="token punctuation">(</span><span class="token operator">-</span>random<span class="token punctuation">.</span>randint<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">return</span> track
注意此方法已经不可用,会被识别出来,结果会显示图片被怪物吃掉了。
二、采用轨迹离散分布生成的算法
# 轨迹公式,也可采用其他公式
def ease_out_quart(self, x):
return 1 - pow(1 - x, 4)
def get_tracks_2(self, distance, seconds, ease_func):
“”"
根据轨迹离散分布生成的数学 生成
成功率很高 90% 往上
:param distance: 缺口位置
:param seconds: 时间
:param ease_func: 生成函数
:return: 轨迹数组
“”"
distance += 20
tracks = [0]
offsets = [0]
for t in np.arange(0.0, seconds, 0.1):
ease = ease_func
offset = round(ease(t / seconds) * distance)
tracks.append(offset - offsets[-1])
offsets.append(offset)
tracks.extend([-3, -2, -3, -2, -2, -2, -2, -1, -0, -1, -1, -1, -1, -2, -1]) #可以自己按情况改
return tracks
这种方法成功率很高,破解极验3滑动验证码没什么问题。