首先是加速度代码

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

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

selenium过豆瓣滑动验证码的更多相关文章

  1. selenium+java破解滑动验证码

    2019-04-16更新 修复极验页面改版,这次采用极验官方的demo地址:https://www.geetest.com/demo/slide-bind.html 截止2019-04-16,极验和腾 ...

  2. selenium登录 京东滑动验证码

    京东的滑动验证码在页面上是没有原图的,所有我是用ps把他们拼成一个的. from selenium import webdriver from selenium.webdriver import Ac ...

  3. selenium篇之滑动验证码

    一.介绍 现在出现了一种通过用户鼠标移动滑块来填补有缺口图片的验证码,我们叫做滑动验证码.它的原理很简单,首先生成一张图片,然后随机挖去一块,在页面展示被挖去部分的图片,再通过js获取用户滑动距离,以 ...

  4. selenium处理极验滑动验证码

    要爬取一个网站遇到了极验的验证码,这周都在想着怎么破解这个,网上搜了好多知乎上看到有人问了这问题https://www.zhihu.com/question/28833985,我按照这思路去大概实现了 ...

  5. selenium+java破解极验滑动验证码的示例代码

    转自: https://www.jianshu.com/p/1466f1ba3275 selenium+java破解极验滑动验证码 卧颜沉默 关注 2017.08.15 20:07* 字数 3085  ...

  6. 利用selenium库自动执行滑动验证码模拟登陆

    破解流程 #1.输入账号.密码,然后点击登陆 #2.点击按钮,弹出没有缺口的图 #3.针对没有缺口的图片进行截图 #4.点击滑动按钮,弹出有缺口的图 #5.针对有缺口的图片进行截图 #6.对比两张图片 ...

  7. Python——破解极验滑动验证码

    极验滑动验证码 以上图片是最典型的要属于极验滑动认证了,极验官网:http://www.geetest.com/. 现在极验验证码已经更新到了 3.0 版本,截至 2017 年 7 月全球已有十六万家 ...

  8. python爬虫21 | 对于b站这样的滑动验证码,不好意思,照样自动识别

    今天 要来说说滑动验证码了 大家应该都很熟悉 点击滑块然后移动到图片缺口进行验证 现在越来越多的网站使用这样的验证方式 为的是增加验证码识别的难度 那么 对于这种验证码 应该怎么破呢 接下来就是 学习 ...

  9. python验证码识别(2)极验滑动验证码识别

    目录 一:极验滑动验证码简介 二:极验滑动验证码识别思路 三:极验验证码识别 一:极验滑动验证码简介   近些年来出现了一些新型验证码,不想旧的验证码对人类不友好,但是这种验证码对于代码来说识别难度上 ...

随机推荐

  1. mysql-STRAIGHT_JOIN-优化

    性能提升神器-STRAIGHT_JOIN,在数据量大的联表查询中灵活运用的话,能大大缩短查询时间. 首先来解释下STRAIGHT_JOIN到底是用做什么的: STRAIGHT_JOIN is simi ...

  2. 初学Linux (Linux_note)

    根目录:/ /root: 存放root用户相关文件 /home: 存放不同用户的相关文件 /bin: 存放常用命令的目录 /sbin: 要具有一定权限才可以使用的命令 /mnt: 默认挂载光驱和软驱的 ...

  3. ucore学习

    1.启动操作系统的bootloader,用于了解操作系统启动前的状态和要做的准备工作,了解运行操作系统的硬件支持,操作系统如何加载到内存中,理解两类中断--"外设中断"," ...

  4. SNN对抗攻击笔记

    SNN对抗攻击笔记: 1. 解决SNN对抗攻击中脉冲与梯度数据格式不兼容性以及梯度消失问题: G2S Converter.Gradient Trigger[1] 2. 基于梯度的对抗攻击方式: FGS ...

  5. docker run 创建容器

    docker run常用命令 docker run :创建一个新的容器并运行一个命令 - 语法:docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 1.OPTI ...

  6. python数据类型和运算符

    一.python类型判断 type,isinstance type(变量或常量):返回数据类型 a = 23.3print(type(a))b = 2e3print(b, type(b))输出: &l ...

  7. 如何满足EN50128软件安全认证标准?

    导语 EN 50128是为铁路行业的特定需求量身定制的功能安全标准.其标题为“铁路应用—通信,信号和处理系统—铁路控制和防护系统软件”.遵守该标准的要求对于铁路软件开发是至关重要的.因此,必须了解什么 ...

  8. UTF-8、GB2312、GBK编码格式详解和编码示例

    UTF-8.GB2312.GBK编码格式详解 参考文章 UTF-8 使用1~4个字节对每个字符进行编码 128个ASCII字符字需要一个字节编码 带有附加符号的拉丁文.希腊文.西里尔字母.亚美尼亚语. ...

  9. js中map()、some()、every()、filter()的区别

    js的Array对象有map.some.every.filter几个方法都能对数组中的每个对象进行处理,但是他们之间的功能又各有差别,所以在记下. map():通过指定函数处理数组的每个元素,并返回处 ...

  10. The Data Warehouse Toolkit 阅读笔记

    前言 这篇笔记的主要内容来至于The Data Warehouse Toolkit,该书可以称为数仓建模的圣经 什么是星型模型 以一个业务实时为主表.比如一笔订单就是一个业务事实.订单有商品的SKU信 ...