selenium过极验滑块验证码

前言

该文章为学习使用,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!如有侵权,请私信联系作者删除~

需求

目标网站:
https://www.geetest.com/demo/slide-float.html
难点:一个是如何确定拖拽到的位置,另一个是避开人机识别(反爬虫)

步骤

1、 打开网站
2、 填写用户名密码
3、 点击验证,保存图片,识别缺口
4、 模拟人工滑动滑块
5、 点击登录

正文

代码注释很清楚,就不展开描述了

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
import base64
import ddddocr

# 打开浏览器
# 过webdriver得验证
options = webdriver.ChromeOptions()
options.add_argument('--disable-blink-features=AutomationControlled')
browsers = webdriver.Chrome(chrome_options=options)
# 窗口最大化
browsers.maximize_window()
browsers.get('https://www.geetest.com/demo/slide-float.html')

# 填写信息
browsers.find_element(By.ID, 'username').send_keys('sadasdasd')
browsers.find_element(By.ID, 'password').send_keys('sasdddasd')
time.sleep(3)

# 点击验证
browsers.find_element(By.CLASS_NAME, 'geetest_radar_tip').click()

# 保存图片
time.sleep(3)
# 缺口图片
bg = browsers.execute_script("return document.getElementsByClassName('geetest_canvas_bg geetest_absolute')[0].toDataURL('image/jpg')").split(',')[1]
# 全图
fullbg = browsers.execute_script("return document.getElementsByClassName('geetest_canvas_fullbg geetest_fade geetest_absolute')[0].toDataURL('image/jpg')").split(',')[1]
with open('bg.jpg',mode='wb') as f:
    f.write(base64.b64decode(bg))
with open('fullbg.jpg', mode='wb') as f:
    f.write(base64.b64decode(fullbg))

# 缺口识别
def read_img():
    slide = ddddocr.DdddOcr(det=False, ocr=False)
    with open('bg.jpg', 'rb') as f:
        target_bytes = f.read()
    with open('fullbg.jpg', 'rb') as f:
        background_bytes = f.read()
    res = slide.slide_comparison(target_bytes, background_bytes)
    return res.get('target')[0]

x = read_img()

# 滑块拖动

slide = browsers.find_element(By.CLASS_NAME,'geetest_slider_button')

action = webdriver.ActionChains(browsers)  # 事件
# 按住
action.click_and_hold(slide)
action.pause(0.2)  # 事件的时间间隔
# 拖动
action.move_by_offset(x-10, 0)
action.pause(0.5)
action.move_by_offset(4, 0)
action.pause(0.5)
# 松开鼠标
action.pause(0.2)
action.release()
# 触发事件
action.perform()

# 点击提交
browsers.find_element(By.ID, 'btn').click()

最后

欢迎联系作者交流更多

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值