首先是加速度代码

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. ssh连接:Socket error Event: 32 Error: 10053.

    今天在使用xshell连接刚装的linux系统的时候,发现无法建立连接,会报如下错误: Connecting to 192.168.21x.x:22...Connection established. ...

  2. 设置Anaconda启动jupyter的默认目录

    要解决的问题:安装好Anaconda后打开jupyter总是会自动跳到c:下的用户目录,通过以下方法可以修改其默认打开的目录 吐槽:竟然没有设置默认打开目录的选项,只能通过修改配置文件完成,让人不爽. ...

  3. Java程序员值得拥有的TreeMap指南

    先看再点赞,给自己一点思考的时间,微信搜索[沉默王二]关注这个有颜值却假装靠才华苟且的程序员.本文 GitHub github.com/itwanger 已收录,里面还有我精心为你准备的一线大厂面试题 ...

  4. 中文、sci论文写作结构总结

    全文建议:30-40篇参考文献,6-8个图,1-3表,<3000词. 一.题目 1.12~15个词,顶多18个词. 2.6个特点:specific.short.impressive.famili ...

  5. oracle impdp 数据迁移 至RDS 亚马逊云

    背景: 公司年底打算将aws rds11.2.0.4 oracle 数据库升级到19c,所以需要进行升级测试,所以需要我把线上的库数据迁移到一台测试的rds oracle 亚马逊云的数据库中,然后升级 ...

  6. SwiftUI - Grid View 的实现方法,逐步剖析助你实现

    简介 在当前正式 SwiftUI 版本而言,很多控件都是缺少的.比如在 UIKit 框架里有 UICollectionView 组件,可以很方便地做 Gird 格子类型的视图.但是在 SwiftUI ...

  7. 洛谷P1080 国王游戏 python解法 - 高精 贪心 排序

    洛谷的题目实在是裹脚布 还编的像童话 这题要 "使得获得奖赏最多的大臣,所获奖赏尽可能的少." 看了半天都觉得不像人话 总算理解后 简单说题目的意思就是 根据既定的运算规则 如何排 ...

  8. 码云git clone报错Incorrect username or password ( access token )

    使用码云将仓库clone到本地,报错信息如下: D:\>git clone https://gitee.com/ycyzharry/helloworld.git Cloning into 'he ...

  9. Blazor带我重玩前端(五)

    概述 本文主要讨论Blazor事件内容,由于blazor事件部分很多,所以会分成上下两篇,本文为第一篇,后续会有第二篇. 我们可以视组件是一个类,我们先看一下前文所说的Index.Razor页面生成的 ...

  10. wampserver64 apache2.4版本局域网互相访问总结

    wampserver64  apache2.4版本局域网互相访问总结 背景:在我的电脑上给算法组开发了一个工具,需要在局域网环境下其他同事都能访问到,搞了一下午终于搞定,于是整理了这篇文档,给其他同行 ...