selenium解决滑块验证码(亲测有效)

要解决滑块验证码,首选我们得梳理一下思路。首先我们要想到的就是怎么把滑块拉过去,这就涉及到拉动的距离问题,也就是要首先要解决滑块和缺口之间的距离的计算;然后就是解决模拟拉动的过程,要考虑怎么模拟才能绕过验证,从而获得验证通过。看到站内有些朋友使用加速度和减速度以及模拟鼠标抖动等一系列动作,或许有些网站确实可以通过验证,但是在我模拟浦发登陆时是没有用的。所以需要使用自定义的滑动曲线来设计滑动轨迹。

一般来说计算offset有两个方法:1. 通过背景图和带有缺口图之间比对像素来确定,但是这种由于背景底色的原因我们不能保证offset计算很准确。但是通过手动调整,我这里登陆浦发银行时准确率可以在75%以上。 2. 通过下载图片然后去训练,由于这方面我不擅长,故而这里只介绍一下第一种方法。

我们需要用到的库有:BytesIO、Image。

这里直接上代码,由于注释写的比较详细,不再做介绍。

import time
import random

from io import BytesIO
from PIL import Image
from selenium.webdriver.common.action_chains import ActionChains

from fund_transactions.sliding_track import drag_and_drop


class SliderVerification(object):
    def __init__(self, driver):
        self.driver = driver

    def get_screenshot(self):
        """
            获取屏幕截图
        """
        screenshot = self.driver.get_screenshot_as_png()
        screenshot = Image.open(BytesIO(screenshot))

        return screenshot

    def update_style(self):
        """
            修改图片的style属性,显示无缺口的图片
        """
        # js = 'document.querySelectorAll("canvas")[3].style="display:block"'
        # 这里使用js去缺口,获得背景图
        js = 'document.getElementsByClassName("geetest_canvas_fullbg geetest_fade geetest_absolute")[0].setAtt
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值