首先是加速度代码

def get_tracks(distance):
    """
    拿到移动轨迹,模仿人的滑动行为,先匀加速后匀减速
    匀变速运动基本公式:
    ①v = v0+at
    ②s = v0t+1/2at^2
    """
    #初速度
    v = 0
    #单位时间为0.3s来统计轨迹,轨迹即0.3内的位移
    t = 0.31
    #位置/轨迹列表,列表内的一个元素代表0.3s的位移
    tracks = []
    #当前位移
    current = 0
    #到达mid值开始减速
    mid = distance*4/5
    while current < distance:
        if current < mid:
            #加速度越小,单位时间内的位移越小,模拟的轨迹就越多越详细
            a = 2
        else:
            a = -3

        #初速度
        v0 = v
        #0.3秒内的位移
        s = v0*t+0.5*a*(t**2)
        #当前的位置
        current += s
        #添加到轨迹列表
        tracks.append(round(s))
        #速度已经到达v,该速度作为下次的初速度
        v = v0+a*t
    return tracks
1.打开豆瓣官网,并且最大化

browser = webdriver.Chrome(r'C:\Program Files\Google\Chrome\Application\chromedriver.exe')
browser.maximize_window()
browser.get('https://www.douban.com/')
打开然后最大化,因为有时候不最大化的话可能导致点击不到
然后豆瓣是很多iframe框架组成的

#2.切换到iframe子页面
login_frame = browser.find_element_by_xpath('//*[@id="anony-reg-new"]/div/div[1]/iframe')
browser.switch_to.frame(login_frame)#移动到iframe

selenium过豆瓣滑动验证码_selenium学习

#3.密码登录+用户名+密码+登录豆瓣
browser.find_element_by_xpath('/html/body/div[1]/div[1]/ul[1]/li[2]').click()
browser.find_element_by_id('username').send_keys('user')
browser.find_element_by_id('password').send_keys('pass')
browser.find_element_by_css_selector('.btn.btn-account').click()
time.sleep(4)

然后就是获取滑动验证码的iframe同上

#4.切换到心得iframe子页面-滑块验证
auth_frame = browser.find_element_by_id('tcaptcha_iframe')
browser.switch_to.frame(auth_frame)

获取拖放button

#5.按住开始滑动位置按钮-先移动180个像素
element = browser.find_element_by_xpath('//*[@id="tcaptcha_drag_thumb"]')
ActionChains(browser).click_and_hold(on_element=element).perform()
#move_to_element_with_offset().移动到距离某个元素左上角多少距离的位置
ActionChains(browser).move_to_element_with_offset(to_element=element,xoffset=180,yoffset=0).perform()

然后就是点击不放+释放

#6.使用加速度函数移动剩下的距离
tracks = get_tracks(25)
for track in tracks:
    #开始移动move_by_offset()
    ActionChains(browser).move_by_offset(xoffset=track,yoffset=0).perform()

#7.延迟释放鼠标:release()
time.sleep(0.5)
ActionChains(browser).release().perform()

可能登录了几次就不行了,因为那边也有机器学习,所以微改加速度就可以了

完整代码

from selenium import webdriver
from selenium.webdriver import ActionChains
import time

def get_tracks(distance):
    """
    拿到移动轨迹,模仿人的滑动行为,先匀加速后匀减速
    匀变速运动基本公式:
    ①v = v0+at
    ②s = v0t+1/2at^2
    """
    #初速度
    v = 0
    #单位时间为0.3s来统计轨迹,轨迹即0.3内的位移
    t = 0.31
    #位置/轨迹列表,列表内的一个元素代表0.3s的位移
    tracks = []
    #当前位移
    current = 0
    #到达mid值开始减速
    mid = distance*4/5
    while current < distance:
        if current < mid:
            #加速度越小,单位时间内的位移越小,模拟的轨迹就越多越详细
            a = 2
        else:
            a = -3

        #初速度
        v0 = v
        #0.3秒内的位移
        s = v0*t+0.5*a*(t**2)
        #当前的位置
        current += s
        #添加到轨迹列表
        tracks.append(round(s))
        #速度已经到达v,该速度作为下次的初速度
        v = v0+a*t
    return tracks

#1.打开豆瓣官网,并且最大化
browser = webdriver.Chrome(r'C:\Program Files\Google\Chrome\Application\chromedriver.exe')
browser.maximize_window()
browser.get('https://www.douban.com/')

#2.切换到iframe子页面
login_frame = browser.find_element_by_xpath('//*[@id="anony-reg-new"]/div/div[1]/iframe')
browser.switch_to.frame(login_frame)#移动到iframe

#3.密码登录+用户名+密码+登录豆瓣
browser.find_element_by_xpath('/html/body/div[1]/div[1]/ul[1]/li[2]').click()
browser.find_element_by_id('username').send_keys('你的账号')
browser.find_element_by_id('password').send_keys('你的密码')
browser.find_element_by_css_selector('.btn.btn-account').click()
time.sleep(4)

#4.切换到心得iframe子页面-滑块验证
auth_frame = browser.find_element_by_id('tcaptcha_iframe')
browser.switch_to.frame(auth_frame)

#5.按住开始滑动位置按钮-先移动180个像素
element = browser.find_element_by_xpath('//*[@id="tcaptcha_drag_thumb"]')
ActionChains(browser).click_and_hold(on_element=element).perform()
#move_to_element_with_offset().移动到距离某个元素左上角多少距离的位置
ActionChains(browser).move_to_element_with_offset(to_element=element,xoffset=180,yoffset=0).perform()

#6.使用加速度函数移动剩下的距离
tracks = get_tracks(25)
for track in tracks:
    #开始移动move_by_offset()
    ActionChains(browser).move_by_offset(xoffset=track,yoffset=0).perform()

#7.延迟释放鼠标:release()
time.sleep(0.5)
ActionChains(browser).release().perform()