前言
该文章为学习使用,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!如有侵权,请私信联系作者删除~
需求
目标网站:
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()
最后
欢迎联系作者交流更多