python滑块验证代码记录

import time

from selenium import webdriver
from selenium.webdriver import ActionChains


def get_track(distance):
    track = []      # 声明一个列表
    current = 0     # 当前位置
    mid = distance * 3 / 4      # 当移动到轨迹全长的四分之三时速度达到最大
    t = 0.2     # 加速时间间隔
    v = 0       # 初始化移动速度
    while current < distance:   # 当前位置未到达终点时持续改变运动速度
        if current < mid:   # 当速度达到最大速度之前,加速度为2,持续加速
            a = 2
        else:               # 当速度达到最大速度之后,加速度为-3,开始减速,保证到达终点时速度为0
            a = -3
        v0 = v              # 初始化初始速度
        v = v0 + a * t      # 加速
        move = v0 * t + 1 / 2 * a * t * t       # 计算每个单位t时间内移动的距离
        current += move     # 将每个单位时间内的移动距离相加计算,当前移动的距离
        track.append(round(move))   # 将单位时间内移动的距离四舍五入取整并存储在列表中
    return track            # 返回不同速度下单位时间内移动距离的列表


def main():
    driver = webdriver.Firefox()

    # driver.implicitly_wait(10)
    driver.get(r'【网址】')

    driver.find_element_by_xpath('/html/body/div[2]/div/div/div[1]/a[2]/span').click()
    driver.find_element_by_xpath('//*[@id="userName"]').clear()    # xpath参数使用单引号
    driver.find_element_by_xpath('//*[@id="userName"]').send_keys('【账户】')
    driver.find_element_by_id('password').clear()
    driver.find_element_by_id('password').send_keys('【密码】')

    try:
        button = driver.find_element_by_xpath('//*[@id="siller1_dt_child_content_containor"]/div[3]')    # 找到“蓝色滑块”
        # 开始拖动 perform()用来执行ActionChains中存储的行为
        flag = 0
        distance = 274
        offset = 0
        times = 0
        while 1:
            action = ActionChains(driver)
            action.click_and_hold(button).perform()
            action.reset_actions()  # 清除之前的action
            print (distance)
            track = get_track(distance)
            for i in track:
                action.move_by_offset(xoffset=i, yoffset=0).perform()
                action.reset_actions()
            time.sleep(1)
            action.release().perform()
            time.sleep(2)

            # 判断某元素是否被加载到DOM树里,并不代表该元素一定可见
            try:
                alert = driver.find_element_by_xpath('//*[@id="dt_notice"]').text
            except Exception as e:
                print('get alert error: %s' % e)
                alert = ''
            if alert == '验证通过':
                print('滑块验证通过')
                flag = 1
                driver.switch_to.parent_frame()  # 验证成功后跳回最外层页面
                break
            else:
                print(u'滑块位移需要调整: %s' % alert)
                distance -= offset
                times += 1
                time.sleep(2)
        # action.move_by_offset(274, 0).perform()  # 移动滑块
    except:
        print("无滑块验证")

    driver.find_element_by_xpath('//*[@id="submit"]').click()
    time.sleep(2)

    # try:
    i = 0
    while i < 2:
        driver.find_element_by_name("lqzx_home_independent_nowget").click()
        time.sleep(2)
        driver.refresh()
        i += 1
    # except:
    #     print("登录不成功")

    # 获得cookie信息
    cookie = driver.get_cookies()

    # 将获得cookie的信息打印
    print(cookie)

    driver.quit()


if __name__ == '__main__':
    main()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章