python滑动验证

安装模块

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

pip install opencv-contrib-python

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

网易易盾案例

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python Selenium是一个用于自动化浏览器的工具,可以模拟用户在浏览器中的操作。而滑动验证是一种常见的验证码形式,在Python Selenium中,可以使用一些方法来完成滑动验证。 首先,你需要导入相应的库并初始化一个WebDriver对象。你可以使用`webdriver.Chrome()`来初始化一个基于Chrome浏览器的WebDriver对象。然后,你可以使用`get()`方法打开一个网页。 在打开网页后,你需要定位到验证按钮和验证码的位置。你可以使用Selenium提供的定位方法(如`find_element_by_xpath()`或`find_element_by_id()`)来定位元素。一旦你获取到了验证按钮和验证码的位置,你可以点击验证按钮来触发验证码的显示。 接下来,你需要获取完整图片和带缺口的图片,并对它们进行比较。在这一步中,你可以使用Python的图像处理库(如PIL)来处理图片,并计算出滑块需要移动的偏移量。 然后,你可以使用`ActionChains`类来控制滑块的移动。你可以使用`click_and_hold()`方法来按住滑块,然后使用`move_by_offset()`方法来移动滑块到目标位置,最后使用`release()`方法释放滑块。这样就完成了滑动验证的过程。 最后,你可以封装这些步骤到一个类中,然后通过调用类的方法来完成滑动验证的功能。在类的初始化方法中,你可以设置一些初始值,如网页URL和等待时间。在类的其他方法中,你可以实现打开网页、定位元素、比较图片、控制滑块移动等功能。 综上所述,你可以使用Python Selenium来实现滑动验证的功能,具体的实现步骤可以参考上述提到的代码和逻辑。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [python3.8.1+selenium实现登录滑块验证功能](https://download.csdn.net/download/weixin_38545517/14841626)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【python+selenium】极验滑动验证码的实现](https://blog.csdn.net/yiyundama/article/details/108125180)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值