D7 极验滑动验证

实验程序

from PIL import Image
from selenium import webdriver
from selenium.webdriver import ActionChains

import time
import random

def main():
    driver = webdriver.Chrome()
    driver.implicitly_wait(10)

    driver.get('https://account.cnblogs.com/signin?returnUrl=https%3A%2F%2Fwww.cnblogs.com%2F')
    input_name = driver.find_element_by_id('LoginName')
    input_name.send_keys('tianxinxin')
    time.sleep(1)
    input_pwd = driver.find_element_by_id('Password')
    input_pwd.send_keys('tianxinxin6666')
    time.sleep(2)
    login_submit = driver.find_element_by_class_name('ladda-label')
    login_submit.click()
    time.sleep(2)

    image1 = get_image1(driver)
    image2 = get_image2(driver)

    distance = get_distance(image1, image2)
    move_dict = get_strck_move(distance)
    move_list = move_dict['move_list']
    back_list = move_dict['back_list']

    move_tag = driver.find_element_by_class_name('geetest_slider_button')
    ActionChains(driver).click_and_hold(move_tag).perform()

    for move in move_list:
        ActionChains(driver).move_by_offset(xoffset=move, yoffset=0).perform()
        time.sleep(0.1)

    time.sleep(0.1)

    for back in back_list:
        ActionChains(driver).move_by_offset(xoffset=back, yoffset=0).perform()
        time.sleep(0.1)

    ActionChains(driver).move_by_offset(xoffset=3, yoffset=0).perform()
    ActionChains(driver).move_by_offset(xoffset=-3, yoffset=0).perform()

    time.sleep(0.1)

    ActionChains(driver).release().perform()

    time.sleep(100)


def get_image1(driver):
    time.sleep(2)
    js_code = '''
    var x = document.getElementsByClassName("geetest_canvas_fullbg")[0].style.display = "block";
    
    '''
    driver.execute_script(js_code)
    image = cut_image(driver)
    return image


def get_image2(driver):
    time.sleep(2)
    js_code = '''
        var x = document.getElementsByClassName("geetest_canvas_fullbg")[0].style.display = "none";

        '''
    driver.execute_script(js_code)
    image = cut_image(driver)
    return image


def cut_image(driver):
    driver.save_screenshot('snap.png')
    image = driver.find_element_by_class_name('geetest_canvas_img')
    left = image.location['x']
    top = image.location['y']
    right = left + image.size['width']
    buttom = top + image.size['height']
    image_obj = Image.open('snap.png')
    img = image_obj.crop((left, top, right, buttom))
    return img


def get_distance(image1, image2):
    start = 60
    num = 60
    for x in range(start, image1.size[0]):
        for y in range(image1.size[1]):
            rgb1 = image1.load()[x, y]
            rgb2 = image2.load()[x, y]
            r = abs(rgb1[0] - rgb2[0])
            g = abs(rgb1[1] - rgb2[1])
            b = abs(rgb1[2] - rgb2[2])

            if not (r < num and g < num and b < num):
                return x - 7


def get_strck_move(distance):
    distance += 20

    v0 = 0
    t = 0.2
    s = 0

    move_list = []
    mid = distance / 5 * 3
    v_list = [2,4,6,8]
    while s < distance:
        if s < mid:
            a = v_list[random.randint(0, len(v_list) - 1)]
        else:
            a = -v_list[random.randint(0, len(v_list) - 1)]    
        v = v0

        s1 = v * t + 0.5 * a * (t ** 2)
        s1 = round(s1) 
        m_v = v + a * t

        v0 = m_v

        move_list.append(s1)
        s += s1

    back_list = [-1, -1, -2, -3, -2, -1, -1, -2, -3, -2, -1, -1]

    return {'move_list': move_list, 'back_list': back_list}


if __name__ == '__main__':
    main()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值