【资料图】

计算滑块移动距离

def get_distance(image1,image2):    """      拿到滑动验证码需要移动的距离      :param image1:没有缺口的图片对象      :param image2:带缺口的图片对象      :return:需要移动的距离      """    # print("size", image1.size)    threshold = 50    for i in range(0,image1.size[0]):  # 260        for j in range(0,image1.size[1]):  # 160            pixel1 = image1.getpixel((i,j))            pixel2 = image2.getpixel((i,j))            res_R = abs(pixel1[0]-pixel2[0]) # 计算RGB差            res_G = abs(pixel1[1] - pixel2[1])  # 计算RGB差            res_B = abs(pixel1[2] - pixel2[2])  # 计算RGB差            if res_R > threshold and res_G > threshold and res_B > threshold:                return i-8  # 需要移动的距离

模拟人为拖动滑块

def get_track(distance):    """    拿到移动轨迹,模仿人的滑动行为,先匀加速后匀减速    匀变速运动基本公式:    ①v=v0+at    ②s=v0t+(1/2)at²    ③v²-v0²=2as    :param distance: 需要移动的距离    :return: 存放每0.2秒移动的距离    """    # 初速度    v=0    # 单位时间为0.2s来统计轨迹,轨迹即0.2内的位移    t=0.2    # 位移/轨迹列表,列表内的一个元素代表0.2s的位移    tracks=[]    # 当前的位移    current=0    # 到达mid值开始减速    mid=int(distance) * 7/8    distance += 10  # 先滑过一点,最后再反着滑动回来    # a = random.randint(1,3)    while current < distance:        if current < mid:            # 加速度越小,单位时间的位移越小,模拟的轨迹就越多越详细            a = random.randint(2,4)  # 加速运动        else:            a = -random.randint(3,5) # 减速运动        # 初速度        v0 = v        # 0.2秒时间内的位移        s = v0*t+0.5*a*(t**2)        # 当前的位置        current += s        # 添加到轨迹列表        tracks.append(round(s))        # 速度已经达到v,该速度作为下次的初速度        v= v0+a*t    # 反着滑动到大概准确位置    for i in range(4):       tracks.append(-random.randint(2,3))    for i in range(4):       tracks.append(-random.randint(1,3))    return tracks

推荐内容