使用selenium解决滑块验证的问题

2023-10-29

使用自动化测试时有些网站会使用滑块来阻止,所以如何解决滑块问题已经成为自动化测试不可或缺的,今天以网易易盾网站的滑块举例:https://dun.163.com/trial/sense

要解决滑块问题的关键就是匹配滑块在背景图中的位置所以使用python中的numpy库来实现获取滑块在背景的坐标,获取到滑块在背景图的坐标后使用ActionChains实现滑块的滑动。此外,注意使用循环来保证最后的成功,代码如下:

from selenium import webdriver
import requests
import time
import cv2
import numpy as np
from selenium.webdriver import ActionChains

driver = webdriver.Chrome(r"C:\Users\lijunfeng\AppData\Local\Programs\Python\Python37\chromedriver.exe")
driver.get('https://dun.163.com/trial/sense')

# 点击进入滑块界面
driver.find_element_by_xpath('/html/body/main/div[1]/div/div[2]/div[2]/ul/li[2]').click()
time.sleep(1)
# 点击完成验证
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]/span').click()
time.sleep(3)

while True:
    # 获取两张图片
    url_s = driver.find_element_by_class_name('yidun_jigsaw').get_attribute('src')
    url_b = driver.find_element_by_class_name('yidun_bg-img').get_attribute('src')
    headers = {
        'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.41 Safari/537.36'
    }
    res_s = requests.get(url_s,headers=headers)
    data_s = res_s.content
    res_b = requests.get(url_b,headers=headers)
    data_b = res_b.content
    # 保存图片
    with open('pic_s.png','wb')as f:
        f.write(data_s)
    with open('pic_b.png','wb')as f:
        f.write(data_b)

    # 使用opencv读取两张图片
    simg = cv2.imread('pic_s.png')
    bimg = cv2.imread('pic_b.png')

    # 灰度处理,降低偏差
    s_img = cv2.cvtColor(simg,cv2.COLOR_BGR2GRAY)
    b_img = cv2.cvtColor(bimg,cv2.COLOR_BGR2GRAY)

    # 保存两张灰度处理的图片
    cv2.imwrite('hui_simg.png',s_img)
    cv2.imwrite('hui_bimg.png',b_img)

    # 处理滑块图片,保存有效部分
    s_img = s_img[s_img.any(1)]

    # opencv的匹配算法,匹配模块寻找两张图片的相似之处
    result = cv2.matchTemplate(b_img,s_img,cv2.TM_CCOEFF_NORMED)
    print('result',result)

    # 获取坐标
    # 获取最大索引
    index_max = np.argmax(result)
    # 获取到坐标
    y,x = np.unravel_index(index_max,result.shape)
    print("y:",y,"x:",x)

    # 定位到滑块
    ele = 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]')

    # 实例化对象
    action = ActionChains(driver)
    # 拖动滑块
    time.sleep(1)
    action.drag_and_drop_by_offset(ele,xoffset=x,yoffset=0).perform()
    time.sleep(1)
    # 定位到验证成功
    time.sleep(1)
    text = 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 text == "验证成功":
        break

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用selenium解决滑块验证的问题 的相关文章

  • 在Linux中的端口80上运行flask[重复]

    这个问题在这里已经有答案了 也许以前有过这个问题的答案 所以请重定向我 如果是这样的话 我正在考虑在端口 80 上运行 Flask 所以我检查了是否有任何东西正在使用端口 80 因为事实证明端口 80 没有运行 所以当我输入以下内容时 if
  • UnicodeDecodeError:“charmap”编解码器无法解码位置 2483 中的字节 0x81:字符映射到 <未定义>

    我正在解析 csv 文件 但收到以下错误 import os import csv from collections import defaultdict demo data defaultdict list if os path exis
  • 为什么最新的 Python 3.8.x 版本不提供 Windows 安装程序?

    我需要在Windows计算机上安装Python 3 8并希望使用最新的小版本3 8 12 https www python org downloads release python 3812 官方发布网页提供了源代码的 tarball 文件
  • Selenium 打开未登录 Chrome 帐户的 chrome

    我最近一直在使用 Selenium WebDriver 我还专门使用 chromedriver 每当我打开一个新的 chrome 窗口 driver get url 时 Chrome 都会以完全默认的状态启动 而不是我刚刚从我的扩展坞打开一
  • 硒网格监听节点端口而不是集线器端口

    对于我的测试 我在不同的端口上本地运行网格和节点 java jar usr bin selenium server jar port 4444 role hub java jar usr bin selenium server jar ro
  • Django 和 AWS 简单电子邮件服务 [重复]

    这个问题在这里已经有答案了 我正在尝试启动并运行 django 站点 并且正在尝试启用 django 的标准密码重置服务 我的网站由 AWS EC2 托管 因此我想将 AWS SES 用于我的电子邮件服务 但是 我无法使 smtp 连接正常
  • 简单 CAE 的问题

    看起来简单的 CAE 不适用于 Carvana 数据集 我正在尝试对 Carvana 数据集进行简单的 CAE 你可以下载它here https www kaggle com c carvana image masking challeng
  • 如何在Python中重命名virtualenv?

    我拼错了名字virtualenv使用以下方法初始化它 virtualenv vnev 我实际上打算创建一个名为的环境venv 尝试重命名后vnev文件夹到venv 我发现这并没有提供太多帮助 激活环境的名称仍然重命名旧的vnev mv vn
  • 使用 mechanize 和 beautiful soup 在 python 中进行原始 HTML 与 DOM 抓取

    我正在尝试编写一个程序 作为示例 该程序将从该网页上刮掉最高价格 http www kayak com flights JFK PAR 2012 06 01 2012 07 01 1adults http www kayak com fli
  • Python 的二进制字符串列表

    我有一个像这样的二进制字符串 1100011101 我想将其解析为一个列表 其中每个 1 或 0 块都是列表中的单独值 例如 1100011101 变成 11 000 111 0 1 您可以通过使用正则表达式而不是从中获得一点 次要 性能g
  • 为什么Python 3中实例方法可以作为类方法调用?

    考虑下面的类 class Foo object def bar self print self 在Python 2中 2 7 13 调用bar 作为类方法引发异常 gt gt gt Foo bar hello Traceback most
  • 使用字体模块的 Tkinter 代码无法从命令行运行?

    我有使用 tkinter 的代码 我可以从 IDLE 运行得很好 但会引发异常AttributeError module object has no attribute font 当它从命令行运行时 其他 tkinter 程序工作正常 但任
  • Kivy错误(python 2.7):sdl2导入错误

    我尝试在我的 Python 2 7 项目 在 PyCharm Windows 10 环境中 上使用 kivy 但出现以下错误 如果有人可以帮助我吗 谢谢 PS 我多次尝试卸载 重新安装库等 并按照像这样的帖子上的建议进行操作 但它不起作用
  • Python 宏:用例?

    如果 Python 有一个类似于 Lisp Scheme 的宏工具 比如元Python https code google com p metapython 你会如何使用它 如果您是一名 Lisp Scheme 程序员 您会使用宏来做什么
  • Python:使用Excel CSV文件仅读取某些列和行

    虽然我可以读取 csv 文件而不是读取整个文件 但如何仅打印某些行和列 想象一下这是 Excel A B C D E State Heart Disease Rate Stroke Death Rate HIV Diagnosis Rate
  • 为什么变量不在循环外更新?

    无法弄清楚为什么结果中的第一个键是 abc 而不是我期望的 c 我使用的是Python 3 6 4 数据结构很奇怪 因为我删除了不相关的键和值 f replace ab r data abc 1 def 2 ghi 3 jkf 4 lmn
  • “gi.repository.Gtk”对象没有属性“gdk”

    我正在尝试使用 GTK 创建多线程 需要 Gtk gdk 但我收到有关没有 gdk 属性的错误 我正在使用带有 Raspbian 的 Raspberry Pi 这就是我导入 GTK 库的方式 try import pygtk pygtk r
  • 按键合并的两个字典的值的并集

    我有两本词典 d1 a x y b k l d2 a m n c p r 如何合并这两个字典以获得这样的结果 d3 a x y m n b k l c p r 当字典的值是简单类型 如 int 或 str 时 这有效 d3 dict i a
  • 打包布尔数组需要通过 int (numpy 1.8.2)

    我正在寻找更紧凑的方式来存储布尔值 numpy 内部需要 8 位来存储一个布尔值 但是np packbits允许打包 他们 这真是太酷了 问题是要打包在4e6字节数组a32e6字节我们需要首先使用的布尔值数组256e6字节将布尔数组转换为
  • 从 Python 访问 802.11 无线管理帧

    我想从 Linux 上的 Python 嗅探 802 11 管理 探测请求 帧 这可以从 Scapy 中实现 如下所示 coding utf 8 from scapy all import def proc p if p haslayer

随机推荐

  • 在Idea中,如何在SpringBoot中使用jsp页面

    在Idea中 如何在SpringBoot中使用jsp页面 1 首先 创建一个SpringBoot工程 选择Spring Initializr 然后点击next 修改工程路径 jdk根据自己安装的具体的jdk版本进行选择 根据项目所需进行选择
  • 刷脸支付彻底解决顾客的支付安全更方便

    创业能成功 其中一项不为人知的关键就在于你无需热爱自己所做的事情 热情当然必需要有 但它可以是因为这个生意能赚钱 而不是对产品的热情 当然这是纯粹的生活选择 不过鉴于赚钱能给自己和他人带来的好处 我希望你发现光是能赚到钱就足以是一种热情 生
  • Unreal4引擎开发学习日志

    Unreal4引擎开发学习笔记1 相关说明 本游戏引擎学习日志是笔者根据网上相关教学视频所写 是对视频内容的精炼与总结 如果您认为笔者所写不清晰明确 可以访问以下链接 Unreal入门第一季 虚幻C 基础训练 虚幻4引擎介绍 虚幻4是一套为
  • 插件编写傻瓜教程>>VC6.0

    gt gt 写在前面本教程主要讲解如何用按键精灵自带的模版编写插件 请大家在教程没全部写完之前不要跟贴 谢谢合作 需要的工具 VC6 0 编辑语言 C gt gt 初步接触1 安装VC6 0 建议不要使用创天的汉化版 2 解压插件自带的模版
  • 软件定价:我们深谙其道吗?

    本文为翻译初稿 更多精彩内容 敬请关注 高效能程序员的修炼 人民邮电出版社 一段时间以来频繁光顾iPhone应用商店 以致于产生了个副作用 我开始从根本上改变了对软件定价的看法 这么多优秀的iPhone应用程序 要么是免费的 要么只卖区区几
  • 关于在windows使用msys2 + mingw + gcc/g++ 编译godot的笔记

    关于在windows使用msys2 mingw gcc g 编译godot的笔记 编译参数 1 target release debug release debug 2 多线程参数 j数字 3 profile是自定义构建参数 可以启用或者禁
  • python中找出numpy array数组的最值及其索引介绍

    转自 微点阅读 https www weidianyuedu com 在list列表中 max list 可以得到list的最大值 list index max list 可以得到最大值对应的索引 但在numpy中的array没有index
  • Echarts饼状图属性设置大全

    1 标题设置 title text 学生生源地来源分布图 subtext 模拟数据 x 设置水平安放位置 默认左对齐 可选值 center left right number x坐标 单位px x center y 设置垂直安放位置 默认全
  • FPGA--IP核之RAM

    RAM 的英文全称是 Random Access Memory 即随机存取存储器 它可以随时把数据写入任一指定地址的存储单元 也可以随时从任一指定地址中读出数据 其读写速度是由时钟频率决定的 RAM主要用来存放程序及程序执行过程中产生的中间
  • 深度学习理论总结(1)

    0 前言 为了在暑假能更好的发展自己 鉴于对深度学习的浓厚兴趣 楼主开始学习深度学习的相关知识 本系列内容是在楼主学习吴恩达老师的深度学习课程后进行的总结 使用的程序软件为python 如有纰漏还请各位大佬指出 我将虚心接受 1 深度学习概
  • Visual Studio Code常用插件详解

    文章目录 前言 VS Code必备插件 1 IntelliCode 2 IntelliCode API Usage Examples 3 Settings Sync 前端必备插件 1 Auto Close Tag 2 Auto Rename
  • USB移植(FLASH)

    USB移植 FLASH 一 说明 准备好USB源文件 可参考正点原子USB读卡器实验例程 下载正点原子资料或光盘资料 例程在 STSW STM32121 STM32 USB FS Device Lib V4 0 0 Projects Mas
  • UID卡、IC卡、ID卡、CUID 卡、FUID 卡、UFUID 卡 有什么区别?

    生活中 我们经常用到门禁卡 考勤卡 电梯卡还有停车卡 这些功能是怎么实现的呢 这是靠卡里封装的芯片和线圈来实现各种功能 不同的芯片频率 容量 读写性各不相同 常见的是IC卡还有ID卡 还有一种叫UID的卡 许多客户不了解UID卡是什么 有什
  • Mac:Split文件分割命令

    1 背景 在宁波银行工作 发现一个包太大传不了 因此要转成小文件 2 分割文件 split b 300m cheetah node v1 1 0 SNAPSHOT tgz cheetah node v1 1 0 SNAPSHOT tgz 那
  • elementUI的下拉框

    效果图 代码
  • [Obsidian]懒人必备插件附使用教程

    最近才知道了Obsidian 就使用Obsidian整理了一下笔记 评价是Obsidian确实是一种挺好的整理笔记的东西 主要就是想复习时候翻书其实挺麻烦 Obsidian提供了链接功能 可以比较好地查找到以前的知识 虽说笔记多了容易不太好
  • 用python实现神经网络

    一 BP神经网络 这里介绍目前常用的BP神经网络 其网络结构及数学模型如下 x为 n 维向量 y 为 n 维向量 隐含层有 q 个神经元 假设 N 有个样本数据 1 2 y t x t t 1 2 N 从输入层到隐含层的权重记为 1 2 1
  • 关于交换机端口的Trunk和Access模式的分析与验证

    1 理论简析 以太网交换机的通信是基于端口的通信 其端口类型分为Trunk port 干道端口 Access port 接入端口 Hybird port 混合端口 三种 Access port一般用于交换机和用户PC主机相连 连接用户主机和
  • MATLAB热力图绘图及颜色更改

    绘制热力图 定义数组p 定义一个数组 p 0 0 249531282218369 0 538162020204790 0 00892397889578578 0 224699560921490 0 000149245738789272 0
  • 使用selenium解决滑块验证的问题

    使用自动化测试时有些网站会使用滑块来阻止 所以如何解决滑块问题已经成为自动化测试不可或缺的 今天以网易易盾网站的滑块举例 https dun 163 com trial sense 要解决滑块问题的关键就是匹配滑块在背景图中的位置所以使用p