自动化滑动极验v3示例
import random
import ddddocr
from playwright.sync_api import sync_playwright
import time
import requests
with sync_playwright() as p:
det = ddddocr.DdddOcr(det=False, ocr=False)
browser = p.chromium.launch(headless=False, args=[
'--disable-blink-features=AutomationControlled',
'--disable-infobars',
'--disable-web-security',
'--disable-features=IsolateOrigins,site-per-process'
])
context = browser.new_context(
user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
viewport={'width': 1280, 'height': 800}
)
page = context.new_page()
# 打开网页
page.goto("https://www.zhihu.com/")
# 找到手机输入位置并输入手机号
page.fill('//*[@name="username"]', "18888888888")
time.sleep(1)
# 找到按钮并点击
page.click('//*[contains(@class, "CountingDownButton")]')
# 等待弹窗出现
time.sleep(3)
# 获取滑块和背景图片的元素
bg_img_src = page.get_attribute('//*[@class="yidun_bg-img"]', "src")
jigsaw_img_src = page.get_attribute('//*[@class="yidun_jigsaw"]', "src")
# 下载图片
bg_img_data = requests.get(bg_img_src).content
jigsaw_img_data = requests.get(jigsaw_img_src).content
with open("full.jpg", "wb") as f:
f.write(bg_img_data)
with open("part.png", "wb") as f:
f.write(jigsaw_img_data)
# 重新读取图片并计算滑块需要移动的距离
with open("part.png", "rb") as f:
target_bytes = f.read()
with open("full.jpg", "rb") as f:
background_bytes = f.read()
res = det.slide_match(target_bytes, background_bytes)
distance = res["target"][0] + 8
print(f"滑块需要移动的距离为 {distance} 像素。")
# 找到滑块并模拟拖动
slider = page.locator('//*[@class="yidun_slider__icon"]')
box = slider.bounding_box()
# 计算滑动轨迹
def human_like_track(distance):
track = []
current = 0
mid = distance * 3 / 4
t = 0.2
v = 0
while current < distance:
if current < mid:
a = random.uniform(2, 3)
else:
a = -random.uniform(2, 4)
v0 = v
v = v0 + a * t
move = v0 * t + 0.5 * a * (t ** 2)
current += move
track.append(round(move))
# 模拟拉扯动作
over_shoot = random.randint(10, 15) # 过头的距离稍微大一点
track.append(over_shoot)
track.append(-over_shoot + random.randint(1, 3))
return track
track = human_like_track(distance)
# 模拟拖动滑块
page.mouse.move(box["x"] + box["width"] / 2, box["y"] + box["height"] / 2)
page.mouse.down()
current_x = box["x"] + box["width"] / 2
for move in track:
current_x += move
page.mouse.move(current_x, box["y"] + box["height"] / 2)
if move < 0: # 拉回来的时候速度稍微慢一点
time.sleep(random.uniform(0.05, 0.1))
else: # 往左的时候速度稍微快一点
time.sleep(random.uniform(0.01, 0.02))
page.mouse.up()
time.sleep(20)
# 关闭浏览器
browser.close()
自动化滑动极验v3示例的更多相关文章
- selenium+java破解极验滑动验证码的示例代码
转自: https://www.jianshu.com/p/1466f1ba3275 selenium+java破解极验滑动验证码 卧颜沉默 关注 2017.08.15 20:07* 字数 3085 ...
- thinkphp整合系列之极验滑动验证码
对于建站的筒子们来说:垃圾广告真是让人深恶痛绝:为了清净:搞个难以识别的验证码吧:又被用户各种吐槽:直到后来出现了极验这个滑动的验证码:这真是一个体验好安全高的方案:官网:http://www.gee ...
- Vue(7)- vue-cookies、极验滑动验证geetest、vue-router的导航守卫
一.vue-cookies 参考文档简书:https://www.jianshu.com/p/535b53989b39 参考文档npm:https://www.npmjs.com/package/vu ...
- vue-cookies、极验滑动验证geetest、vue-router的导航守卫
一 . vue-cookies 参考文档简书:https://www.jianshu.com/p/535b53989b39 参考文档npm:https://www.npmjs.com/package/ ...
- 极验反爬虫防护分析之slide验证方式下图片的处理及滑动轨迹的生成思路
本文要分享的内容是去年为了抢鞋而分析 极验(GeeTest)反爬虫防护的笔记,由于篇幅较长(为了多混点CB)我会按照我的分析顺序,分成如下四个主题与大家分享: 极验反爬虫防护分析之交互流程分析 极验反 ...
- selenium处理极验滑动验证码
要爬取一个网站遇到了极验的验证码,这周都在想着怎么破解这个,网上搜了好多知乎上看到有人问了这问题https://www.zhihu.com/question/28833985,我按照这思路去大概实现了 ...
- selenium+java破解极验滑动验证码
摘要 分析验证码素材图片混淆原理,并采用selenium模拟人拖动滑块过程,进而破解验证码. 人工验证的过程 打开威锋网注册页面(https://passport.feng.com/?r=user/r ...
- Django中使用极验Geetest滑动验证码
一,环境部署 1.创建一个django测试项目 此处省略... 二,文档部署 1.下载安装python对应的SDK 使用命令从Github导入完整项目:git clone https://github ...
- vue_drf之实现极验滑动验证码
一.需求 1,场景 我们在很多登录和注册场景里,为了避免某些恶意攻击程序,我们会添加一些验证码,也就是行为验证,让我们相信现在是一个人在交互,而不是一段爬虫程序.现在市面上用的比较多的,比较流行的是极 ...
- 极验3.0滑动拼图验证的使用--java
[ 前言: 在登录其他网站的时候,看到有个滑动拼图的验证觉得挺好玩的,以前做一个图片验证的小demo,现在发现很多网站都开始流行滑动拼图的验证了,今天也想自己动手来弄一个. 废话不多说,开始撸起来! ...
随机推荐
- MongoDB mongod.log "connection refused because too many open connections" 处理方法
一.MongoDB副本集 副本集名称 角色 IP地址 端口号 优先级 CCTV-test Primary 192.168.1.21 27017 10 Secondary 192.168.1.21 27 ...
- Web渗透09_文件包含漏洞
1 文件包含漏洞描述 开发人员编写代码时独立性好是一个很重要的要求,这边一个数据库类,那边一个模型类.几百行的整体代码,在整合时两行行代码就可以包含进来使用.文件包含有助于独立的代码之间的配合!有时引 ...
- Mac安装Docker
一.下载 从官网下载速度太慢,推荐在阿里云镜像下载. 下载地址:http://mirrors.aliyun.com/docker-toolbox/mac/docker-for-mac/stable/D ...
- 3-5&&6 C++数组遍历
遍历二维数组的三种方式 #include<iostream> #include<string> #include<vector> using namespace s ...
- .NET 8.0 通用管理平台,支持模块化、WinForms 和 WPF
前言 领导要求做一个小项目,要求独立运行,用以最少的依赖,此时不想集成到主项目中,但是又想用HzyAdmin中如此好用的自动注入,还有操作简单的仓储模式,话不多说,直接开干. HzyAdmin 是一个 ...
- 9.Kubernetes核心技术-Controller
Kubernetes核心技术-Controller 内容 什么是Controller Pod和Controller的关系 Deployment控制器应用场景 yaml文件字段说明 Deployment ...
- Solr的学习使用之(七)Solr高级查询facet、facet.pivot简介 - OnTheRoad_Lee
http://martin3000.iteye.com/blog/1330106 1 .什么是Faceted Search Facet['fæsɪt]很难翻译,只能靠例子来理解了.Solr作者Yoni ...
- Spring AOP进行日志记录,管理 (使用Spring的拦截器功能获取对action中每个方法的调用情况,在方法调用前和调用后记录相关日志。)
在java开发中日志的管理有很多种.我一般会使用过滤器,或者是Spring的拦截器进行日志的处理.如果是用过滤器比较简单,只要对所有的.do提交进行拦截,然后获取action的提交路径就可以获取对每个 ...
- js逆向之常用算法
[Python] encode & decode from urllib import parse # url进行编码与解码 url = '你好啊' url_encode = parse.qu ...
- laravel之model
记录laravel 中model常用方法 1.keyBy() 指定数据的某个字段作为该条数据的key 2.like操作 $model->where('goods', 'like', '%test ...