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示例的更多相关文章

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

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

  2. thinkphp整合系列之极验滑动验证码

    对于建站的筒子们来说:垃圾广告真是让人深恶痛绝:为了清净:搞个难以识别的验证码吧:又被用户各种吐槽:直到后来出现了极验这个滑动的验证码:这真是一个体验好安全高的方案:官网:http://www.gee ...

  3. Vue(7)- vue-cookies、极验滑动验证geetest、vue-router的导航守卫

    一.vue-cookies 参考文档简书:https://www.jianshu.com/p/535b53989b39 参考文档npm:https://www.npmjs.com/package/vu ...

  4. vue-cookies、极验滑动验证geetest、vue-router的导航守卫

    一 . vue-cookies 参考文档简书:https://www.jianshu.com/p/535b53989b39 参考文档npm:https://www.npmjs.com/package/ ...

  5. 极验反爬虫防护分析之slide验证方式下图片的处理及滑动轨迹的生成思路

    本文要分享的内容是去年为了抢鞋而分析 极验(GeeTest)反爬虫防护的笔记,由于篇幅较长(为了多混点CB)我会按照我的分析顺序,分成如下四个主题与大家分享: 极验反爬虫防护分析之交互流程分析 极验反 ...

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

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

  7. selenium+java破解极验滑动验证码

    摘要 分析验证码素材图片混淆原理,并采用selenium模拟人拖动滑块过程,进而破解验证码. 人工验证的过程 打开威锋网注册页面(https://passport.feng.com/?r=user/r ...

  8. Django中使用极验Geetest滑动验证码

    一,环境部署 1.创建一个django测试项目 此处省略... 二,文档部署 1.下载安装python对应的SDK 使用命令从Github导入完整项目:git clone https://github ...

  9. vue_drf之实现极验滑动验证码

    一.需求 1,场景 我们在很多登录和注册场景里,为了避免某些恶意攻击程序,我们会添加一些验证码,也就是行为验证,让我们相信现在是一个人在交互,而不是一段爬虫程序.现在市面上用的比较多的,比较流行的是极 ...

  10. 极验3.0滑动拼图验证的使用--java

    [ 前言: 在登录其他网站的时候,看到有个滑动拼图的验证觉得挺好玩的,以前做一个图片验证的小demo,现在发现很多网站都开始流行滑动拼图的验证了,今天也想自己动手来弄一个. 废话不多说,开始撸起来! ...

随机推荐

  1. 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 ...

  2. Web渗透09_文件包含漏洞

    1 文件包含漏洞描述 开发人员编写代码时独立性好是一个很重要的要求,这边一个数据库类,那边一个模型类.几百行的整体代码,在整合时两行行代码就可以包含进来使用.文件包含有助于独立的代码之间的配合!有时引 ...

  3. Mac安装Docker

    一.下载 从官网下载速度太慢,推荐在阿里云镜像下载. 下载地址:http://mirrors.aliyun.com/docker-toolbox/mac/docker-for-mac/stable/D ...

  4. 3-5&&6 C++数组遍历

    遍历二维数组的三种方式 #include<iostream> #include<string> #include<vector> using namespace s ...

  5. .NET 8.0 通用管理平台,支持模块化、WinForms 和 WPF

    前言 领导要求做一个小项目,要求独立运行,用以最少的依赖,此时不想集成到主项目中,但是又想用HzyAdmin中如此好用的自动注入,还有操作简单的仓储模式,话不多说,直接开干. HzyAdmin 是一个 ...

  6. 9.Kubernetes核心技术-Controller

    Kubernetes核心技术-Controller 内容 什么是Controller Pod和Controller的关系 Deployment控制器应用场景 yaml文件字段说明 Deployment ...

  7. Solr的学习使用之(七)Solr高级查询facet、facet.pivot简介 - OnTheRoad_Lee

    http://martin3000.iteye.com/blog/1330106 1 .什么是Faceted Search Facet['fæsɪt]很难翻译,只能靠例子来理解了.Solr作者Yoni ...

  8. Spring AOP进行日志记录,管理 (使用Spring的拦截器功能获取对action中每个方法的调用情况,在方法调用前和调用后记录相关日志。)

    在java开发中日志的管理有很多种.我一般会使用过滤器,或者是Spring的拦截器进行日志的处理.如果是用过滤器比较简单,只要对所有的.do提交进行拦截,然后获取action的提交路径就可以获取对每个 ...

  9. js逆向之常用算法

    [Python] encode & decode from urllib import parse # url进行编码与解码 url = '你好啊' url_encode = parse.qu ...

  10. laravel之model

    记录laravel 中model常用方法 1.keyBy() 指定数据的某个字段作为该条数据的key 2.like操作 $model->where('goods', 'like', '%test ...