python 破解 抖店 滑块 + 获取加密数据
滑块是最 爬虫很头疼的问题。今天我们就要落地解决这个问题!!!
效果展示
这是我爬的 抖店后台订单数据(只是爬到数据,并没有提供给商业!!!):
今天主要是介绍如何破解登录的滑块,此方法也适应所有的类似滑块的网站
核心思想步骤
- 下载滑块,滑块背景图,存储到本地。
- 图像识别滑块到背景缺口的横向距离(关键)。
- 根据距离算出移动的轨迹数组。
- ActionChains 模拟鼠标按下,移动,松开。
下载滑块逻辑
通过visibility_of_element_located 拿到元素, 然后获取src属性,就是图片地址,然后通过requests下载图片(没有src的,可以通过获取元素的location截图来实现)。
def download_slider_bg(self):
# 下载 背景图片
Logs.i("正在下载滑块背景图片...")
bg = self.chrome.visibility_of_element_located(
id='captcha-verify-image')
r = requests.get(bg.get_attribute('src'), stream=True)
if r.status_code == 200:
open(self.slider_bg, 'wb').write(r.content)
Logs.i("下载滑块背景图片成功")
return bg
raise RuntimeError('滑块背景图片下载不成功 : ' + bg.get_attribute('src'))
def download_slider(self):
Logs.i("正在下载滑块图片...")
bg = self.chrome.visibility_of_element_located(
class_name='captcha_verify_img_slide')
r = requests.get(bg.get_attribute('src'), stream=True)
if r.status_code == 200:
open(self.slider, 'wb').write(r.content)
Logs.i("下载滑块图片成功")
return bg
raise RuntimeError('滑块图片下载不成功 : ' + bg.get_attribute('src'))
图像识别逻辑
图像识别利用了python库, 代码可以找我索取,但是要付费。 我研究也不容易啊(花了一个多星期)~~~~~
完整代码下载:
生成人为轨迹逻辑
def ease_out_expo(self, x):
if x == 1:
return 1
else:
return 1 - pow(2, -10 * x)
def _get_track(self, distance):
'''
获取滑动轨迹
:param distance: 滑块的滑动距离
:param seconds: 滑动的相对时间
:return:滑动轨迹
'''
tracks = [0]
offsets = [0]
for t in np.arange(0.0, 3, 0.1):
offset = round(self.ease_out_expo(t / 3) * distance)
tracks.append(offset - offsets[-1])
offsets.append(offset)
return tracks
模拟鼠标逻辑
def move_slider(self, tracks):
move_btn = self.chrome.element_to_be_clickable(
class_name='secsdk-captcha-drag-icon')
self.chrome.actions().click_and_hold(move_btn).perform()
for x in tracks:
Logs.i("正在移动滑块... x:" + str(x))
self.chrome.actions().move_by_offset(xoffset=x, yoffset=0).perform()
time.sleep(1)
self.chrome.actions().release().perform()
完整代码下载: