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()

 

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