selenium过豆瓣滑动验证码
首先是加速度代码
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过豆瓣滑动验证码的更多相关文章
- selenium+java破解滑动验证码
2019-04-16更新 修复极验页面改版,这次采用极验官方的demo地址:https://www.geetest.com/demo/slide-bind.html 截止2019-04-16,极验和腾 ...
- selenium登录 京东滑动验证码
京东的滑动验证码在页面上是没有原图的,所有我是用ps把他们拼成一个的. from selenium import webdriver from selenium.webdriver import Ac ...
- selenium篇之滑动验证码
一.介绍 现在出现了一种通过用户鼠标移动滑块来填补有缺口图片的验证码,我们叫做滑动验证码.它的原理很简单,首先生成一张图片,然后随机挖去一块,在页面展示被挖去部分的图片,再通过js获取用户滑动距离,以 ...
- selenium处理极验滑动验证码
要爬取一个网站遇到了极验的验证码,这周都在想着怎么破解这个,网上搜了好多知乎上看到有人问了这问题https://www.zhihu.com/question/28833985,我按照这思路去大概实现了 ...
- selenium+java破解极验滑动验证码的示例代码
转自: https://www.jianshu.com/p/1466f1ba3275 selenium+java破解极验滑动验证码 卧颜沉默 关注 2017.08.15 20:07* 字数 3085 ...
- 利用selenium库自动执行滑动验证码模拟登陆
破解流程 #1.输入账号.密码,然后点击登陆 #2.点击按钮,弹出没有缺口的图 #3.针对没有缺口的图片进行截图 #4.点击滑动按钮,弹出有缺口的图 #5.针对有缺口的图片进行截图 #6.对比两张图片 ...
- Python——破解极验滑动验证码
极验滑动验证码 以上图片是最典型的要属于极验滑动认证了,极验官网:http://www.geetest.com/. 现在极验验证码已经更新到了 3.0 版本,截至 2017 年 7 月全球已有十六万家 ...
- python爬虫21 | 对于b站这样的滑动验证码,不好意思,照样自动识别
今天 要来说说滑动验证码了 大家应该都很熟悉 点击滑块然后移动到图片缺口进行验证 现在越来越多的网站使用这样的验证方式 为的是增加验证码识别的难度 那么 对于这种验证码 应该怎么破呢 接下来就是 学习 ...
- python验证码识别(2)极验滑动验证码识别
目录 一:极验滑动验证码简介 二:极验滑动验证码识别思路 三:极验验证码识别 一:极验滑动验证码简介 近些年来出现了一些新型验证码,不想旧的验证码对人类不友好,但是这种验证码对于代码来说识别难度上 ...
随机推荐
- 解决MySql Access denied for user 'root'@'192.168.1.119' to databse 的问题
因为ip未授权,在navicat中执行 grant all privileges on *.* to 'root'@'192.168.1.119' identified by 'root' with ...
- MySQL经典练习题及答案,常用SQL语句练习50题
表名和字段 –1.学生表 Student(s_id,s_name,s_birth,s_sex) –学生编号,学生姓名, 出生年月,学生性别 –2.课程表 Course(c_id,c_name,t_id ...
- Linux 资源监控与性能测试
综合管理 glances 系统情况监控 vmstat 能看到上下文切换,runnable进程个数,uninterrupted进程个数 磁盘IO iostat是磁盘级别监控,iotop进程级别监控,注意 ...
- 操作系统-I/O(4)I/O控制方式
I/O控制的方式分为: 程序直接控制方式(最简单的I/O方式) • 无条件传送:对简单外设定时(同步)进行数据传送 • ...
- HM16.0之PCM模式——xCheckIntraPCM
参考:https://blog.csdn.net/cxy19931018/article/details/79781042 1.源代码: /** Check R-D costs for a CU wi ...
- muduo源码解析8-date类
date class date:copyable { }: 作用: 此类作用主要是实现年月日和julianDay的互相转换内部最重要的一个数据成员m_julianDayNumber在mymuduo:: ...
- WebApis中DOM执行机制的认识
1.1. 节点操作 1.1.1 删除节点 node.removeChild() 方法从 node节点中删除一个子节点,返回删除的节点. <button>删除</button> ...
- 日志记录——logging模块
Logging:日志记录是为了跟踪记录软件运行时,发生的事件,包括出错,提示信息等等.log日志级别:日志级别大小关系为:CRITICAL > ERROR > WARNING > I ...
- 【Pod Terminating原因追踪系列之三】让docker事件处理罢工的cancel状态码
本篇为Pod Terminating原因追踪系列的第三篇,前两篇分别介绍了两种可能导致Pod Terminating的原因.在处理现网问题时,Pod Terminating属于比较常见的问题,而本系列 ...
- Vuex 注入 Vue 生命周期的过程
首先我们结合 Vue 和 Vuex 的部分源码,来说明 Vuex 注入 Vue 生命周期的过程. 说到源码,其实没有想象的那么难.也和我们平时写业务代码差不多,都是方法的调用.但是源码的调用树会复杂很 ...