python滑动验证

安装模块

#pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install opencv-contrib-python

cv2无代码提示,找到cv2的包把cv2.pyd复制进site-packages。

网易易盾案例

python滑动验证_第1张图片

import cv2 # 处理图片(模块不支持中文)
import requests #获取图片链接
from selenium import webdriver #浏览器帮助操作
from selenium.webdriver import ActionChains #控制鼠标的模块
from selenium.webdriver.common.by import By #获取元素
import numpy as np
import time

driver = webdriver.Chrome() # 操作谷歌浏览器
driver.get('https://dun.163.com/trial/sense')
driver.maximize_window() # 全屏
# 选择可疑用户-滑动拼图
driver.find_element(By.XPATH,'/html/body/main/div[1]/div/div[2]/div[2]/ul/li[2]').click()
time.sleep(3)
# 点击安全验证
driver.find_element(By.XPATH,'/html/body/main/div[1]/div/div[2]/div[2]/div[1]/div[2]/div[1]/div/div[2]/div[3]/div/div/div[1]/div[1]').click()
time.sleep(3)
# 获取图片链接
while True:
    # 获取验证码背景链接
    background_img = driver.find_element(By.XPATH,'/html/body/main/div[1]/div/div[2]/div[2]/div[1]/div[2]/div[1]/div/div[2]/div[3]/div/div/div[2]/div/div/div[1]/div/div[1]/img[1]').get_attribute('src')
    # 获取验证码滑块链接
    block_img = driver.find_element(By.XPATH,'/html/body/main/div[1]/div/div[2]/div[2]/div[1]/div[2]/div[1]/div/div[2]/div[3]/div/div/div[2]/div/div/div[1]/div/div[1]/img[2]').get_attribute('src')

    # 获取图片,保存到本地
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"
    }
    res = requests.get(background_img,headers=headers)
    background_data = res.content

    req = requests.get(block_img,headers=headers)
    block_data = req.content

    # 将图片保存到本地
    with open ('./background_img.png','wb') as f1:
        f1.write(background_data)

    with open ('./block_img.png','wb') as f2:
        f2.write(block_data)

#以下报错
    # 通过cv2读取图片
    bgimg = cv2.imread('./background_img.png')
    blimg = cv2.imread('./block_img.png')
    # 灰度处理,降低偏差

    bg_img = cv2.cvtColor(bgimg, cv2.COLOR_BGR2GRAY)
    bl_img = cv2.cvtColor(blimg, cv2.COLOR_BGR2GRAY)

    # 保存处理过后的图片
    cv2.imwrite('./hui_bgimg.png', bg_img)
    cv2.imwrite('./hui_blimg.png', bl_img)

# 将模块图和北京图块确实的部分进行匹配
# 使用matchTemplate()方法,模块会将图像中的每一块区域都覆盖一遍,
# 并每次使用所选的method方法进行计算,每次的计算结果最后以一个二维数组的形式返回给我们。
# matchTemplate(目标对象,模板对象,匹配方式)模板匹配
# TM_CCORR_NORMED相关系数匹配(相似程度,值越大越相似)


    result = cv2.matchTemplate(bg_img,bl_img,cv2.TM_CCORR_NORMED)

    # 获取数组中维度最大的值的索引
    index_max = np.argmax(result)

    # 定位坐标
    y,x = np.unravel_index(index_max,result.shape)

    # 定位滑块条
    bl_bc = driver.find_element(By.XPATH,'/html/body/main/div[1]/div/div[2]/div[2]/div[1]/div[2]/div[1]/div/div[2]/div[3]/div/div/div[2]/div/div/div[2]/div[2]/span')
    time.sleep(2)

    # 拖动滑块条
    action = ActionChains(driver)

    # 拖拽滑块条
    action.drag_and_drop_by_offset(bl_bc, xoffset=x, yoffset=0).perform()
    time.sleep(2)

    #定位验证成功的元素
    success = driver.find_element(By.XPATH,'/html/body/main/div[1]/div/div[2]/div[2]/div[1]/div[2]/div[1]/div/div[2]/div[3]/div/div/div[1]/div[2]/span[2]').text
    if success == "验证成功":
        break

你可能感兴趣的:(python,windows,开发语言)