【Python_Selenium学习笔记(八)】基于Selenium模块实现滑块验证码破解

news2024/9/28 21:28:52

基于Selenium模块实现滑块验证码破解

前言

有些网站页面会在 访问时进行滑块验证,针对此问题,此篇文章中会介绍如何基于 Selenium 模块实现滑块验证码的破解 ,并以模拟登录豆瓣网,破解其滑块验证码 为例进行讲解。

正文

1、滑块验证码破解原理

使用 Selenium 模块 完全模拟人的行为,按住滑块,移动到缺口位置。

2、滑块验证码破解步骤

  1. 先将滑块一次性快速移动到某一位置,再滑块位置到缺口位置的距离划分为五份等距离
  2. 前4/5的距离快速滑动
  3. 后1/5的距离先匀加速移动,再匀减速移动,最终到达缺口位置
    注意:以上步骤完全模拟人的行为,如果滑动过快会被网站认定为爬虫程序

3、滑块验证码破解-加速度函数

针对步骤2、3中的前4/5的距离快速滑动,后1/5的距离先匀加速移动,再匀减速移动,最终到达缺口位置,需要一个加速度函数来实现此功能

# 加速度函数
def get_tracks(distance):
    """
    拿到移动轨迹,模拟人的滑动行为,先匀加速后匀减速
    匀变速运动基本公式:
    1.v=v₀+at
    2.s=v₀t+1/2*at²
    :param distance:滑块一次性快速移动到某一位置后剩下的距离,进行五等分
    :return:位置/轨迹列表,列表内的一个元素代表0.3s的位移
    """
    v = 0  # 初速度
    t = 0.3  # 单位时间为0.3s来统计轨迹,轨迹即0.3内的位移
    tracks = []  # 位置/轨迹列表,列表内的一个元素代表0.3s的位移
    current = 0  # 当前的位移
    mid = distance * 4 / 5  # 到达mid值开始减速,前4/5匀加速,后1/5匀减速
    while current < distance:
        if current < mid:  # 加速度越小,单位时间内的位移越小,模拟的轨迹就越多越详细
            a = 2
        else:
            a = -3
        v0 = v  # 初速度
        s = v0 * t + 0.5 * a * (t ** 2)  # 0.3s内的位移
        current += s  # 当前的位置
        tracks.append(round(s))  # 添加到轨迹列表
        v = v0 + a * t  # 速度已经达到v,该速度作为下次的初速度
    return tracks  # tracks:[第1个0.3s的移动距离,第2个0.3s的移动距离,......]

4、滑块验证码破解案例

  1. 案例需求:豆瓣网登录界面输入用户名密码后,进入滑块验证界面后使用 Selenium+Chrome 进行节点的定位并进行移动。

  2. url地址:https://www.douban.com/

  3. 如何进入滑块验证界面可参考:【Python_Selenium学习笔记(七)】基于Selenium模块实现切换frame

  4. 切换到滑块验证iframe子页面:'//*[@id="tcaptcha_iframe_dy"]'在这里插入图片描述

  5. 按住开始滑动位置按钮 - 先移动180个像素:

    start_node = driver.find_element(By.XPATH, '//*[@id="tcOperation"]/div[6]')
    ActionChains(driver).click_and_hold(on_element=start_node).perform()  # 点击并按住
    ActionChains(driver).move_to_element_with_offset(to_element=start_node, xoffset=145,
                                                     yoffset=0).perform()  # 移动到距离某一节点多少距离的位置
    time.sleep(1)
    
  6. 使用加速度函数移动剩下的距离:

    tracks = get_tracks(45)
    for track in tracks:
        ActionChains(driver).move_by_offset(xoffset=track, yoffset=0).perform()
        # move_by_offset:鼠标从当前位置移动多少的距离
    
  7. 延迟释放鼠标:release()

    time.sleep(1)
    ActionChains(driver).release().perform()
    
  8. 完整代码:

    import time
    from selenium import webdriver
    from selenium.webdriver import ActionChains
    from selenium.webdriver.common.by import By
    
    
    # 加速度函数
    def get_tracks(distance):
        """
        拿到移动轨迹,模拟人的滑动行为,先匀加速后匀减速
        匀变速运动基本公式:
        1.v=v₀+at
        2.s=v₀t+1/2*at²
        :param distance:滑块一次性快速移动到某一位置后剩下的距离,进行五等分
        :return:位置/轨迹列表,列表内的一个元素代表0.3s的位移
        """
        v = 0  # 初速度
        t = 0.3  # 单位时间为0.3s来统计轨迹,轨迹即0.3内的位移
        tracks = []  # 位置/轨迹列表,列表内的一个元素代表0.3s的位移
        current = 0  # 当前的位移
        mid = distance * 4 / 5  # 到达mid值开始减速,前4/5匀加速,后1/5匀减速
        while current < distance:
            if current < mid:  # 加速度越小,单位时间内的位移越小,模拟的轨迹就越多越详细
                a = 2
            else:
                a = -3
            v0 = v  # 初速度
            s = v0 * t + 0.5 * a * (t ** 2)  # 0.3s内的位移
            current += s  # 当前的位置
            tracks.append(round(s))  # 添加到轨迹列表
            v = v0 + a * t  # 速度已经达到v,该速度作为下次的初速度
        return tracks  # tracks:[第1个0.3s的移动距离,第2个0.3s的移动距离,......]
    
    
    driver = webdriver.Chrome()  # 创建浏览器对象
    driver.get(url="https://www.douban.com/")
    
    # 1、先切换到 iframe子页面
    iframe_node = driver.find_element(By.XPATH, '//*[@id="anony-reg-new"]/div/div[1]/iframe')
    # //*[@id="anony-reg-new"]/div/div[1]/iframe
    driver.switch_to.frame(iframe_node)  # 切换到 iframe子页面
    # /html/body/div[1]
    # 2、找到密码登录 并点击
    driver.find_element(By.XPATH, '/html/body/div[1]/div[1]/ul[1]/li[2]').click()
    
    # 3、找到找到手机号/邮箱、密码的输入框,和登录豆瓣按键
    username = driver.find_element(By.XPATH, '//*[@id="username"]')
    username.send_keys("13885124596")
    
    password = driver.find_element(By.XPATH, '//*[@id="password"]')
    password.send_keys("123456")
    
    driver.find_element(By.XPATH, '/html/body/div[1]/div[2]/div[1]/div[5]/a').click()
    time.sleep(1)
    # 4、切换到新的iframe子页面-滑块验证
    verify_iframe = driver.find_element(By.XPATH, '//*[@id="tcaptcha_iframe_dy"]')
    # //*[@id="tcaptcha_iframe_dy"]
    driver.switch_to.frame(verify_iframe)
    # 5、按住开始滑动位置按钮 - 先移动180个像素
    start_node = driver.find_element(By.XPATH, '//*[@id="tcOperation"]/div[6]')
    ActionChains(driver).click_and_hold(on_element=start_node).perform()  # 点击并按住
    ActionChains(driver).move_to_element_with_offset(to_element=start_node, xoffset=145,
                                                     yoffset=0).perform()  # 移动到距离某一节点多少距离的位置
    time.sleep(1)
    # 6、使用加速度函数移动剩下的距离
    tracks = get_tracks(45)
    for track in tracks:
        ActionChains(driver).move_by_offset(xoffset=track, yoffset=0).perform()
        # move_by_offset:鼠标从当前位置移动多少的距离
    # 7、延迟释放鼠标:release()
    time.sleep(1)
    ActionChains(driver).release().perform()
    time.sleep(1)
    
    
  9. 实现效果
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/429736.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

需要买apple pencil吗?ipad第三方电容笔了解下

第一款ipad早在诞生于十年前&#xff0c;并被作为一款平板电脑使用&#xff0c;其性能十分出色。随着IPAD的不断更新换代&#xff0c;IPAD已经被越来越多的人接受了。其中&#xff0c;iPad的附属配件起到了很大的作用&#xff0c;就像今天要介绍的电容笔&#xff0c;它是我们进…

Python接外包养无敌可爱的她,每天都随便花~

人生苦短&#xff0c;我用python 女友好不容易放假&#xff0c;她带着我花花花的样子真的很迷人~ python 安装包资料:点击此处跳转文末名片获取 不为什么 我的女友我来宠&#xff01; 作为一个程序员&#xff0c;要有会用自己的技术创造价值的自觉~ 今天来给大家展示一下用py…

第七章 法律行为与法律意识

目录 第一节 法律行为 一、 法律行为的含义与特征二、 法律行为的结构 &#xff08;一&#xff09;法律行为的内在方面 动机目的认知能力 &#xff08;二&#xff09;法律行为的外在方面 行动&#xff08;行为&#xff09;手段结果 三、法律行为的分类 第二节 法律意识 一、法…

【WebRTC技术专题】大势所趋,迈向认识 WebRTC 的第一步(2)

每日一句 人生的挑战&#xff0c;无处不在&#xff0c;满怀信心&#xff0c;轻装上路&#xff0c;明天永远是充满希望的战场。 承接上文 承接上文的内容介绍完相关WebRTC技术的概念和发展历程后&#xff0c;开始初步摸索一下相关WebRTC技术的功能和原理。&#x1f33a;【WebRTC…

【科普】一篇搞定发paper基本概念:SCI、EI、会议/期刊、分区、CCF、DOI、IF、h-index、及cs/ee常见会议:CVPR、GlobeCOM等

文章目录基础概念SCI、EI、CPCI&#xff08;ISTP&#xff09;论文类型&#xff1a;Journal、magazine、transaction、letter、 proceedingsDOI&#xff08;数字对象标识Digital Object Identifier&#xff09;IF 期刊影响因子(Impact Factor&#xff0c;IF)H指数 (h-index/h-fa…

时间序列 | MATLAB实现CNN-LSTM-Attention时间序列预测

时间序列 | MATLAB实现CNN-LSTM-Attention时间序列预测 目录时间序列 | MATLAB实现CNN-LSTM-Attention时间序列预测预测效果基本介绍模型描述程序设计参考资料预测效果 基本介绍 MATLAB实现CNN-LSTM-Attention时间序列预测&#xff0c;CNN-LSTM结合注意力机制时间序列预测。 模…

使用wait监听tomcat服务启动

文章的wait脚本素材会放在末尾 执行docker-compose.yml文件之后就有mysql的主服务器&#xff0c;还有从服务器&#xff0c;还有tomcat服务&#xff0c;在tomcat中部署一个crm项目&#xff0c;tomcat服务中我们添加了启动顺序&#xff0c; # 启动顺序 depends_on: - mysql…

低压接地系统:TN-C 、TN-S、TN-C-S、TT、IT

电力系统的接地直接关系到用户的人身和财产安全,以及电气设备和电子设备的正常运行。如何针对实际情况选择合适的接地系统,确保配电系统及电气设备的安全使用,是电气设计人员面临的首要问题。 根据 国际电工委员会(IEC)规定的各种保护接地方式的术语概念,低压配电系统按…

如何利用开源思想开发一个SEO友好型网站

当你对一个网站进行 SEO 优化的时候&#xff0c;不要期望你的努力能立即得到回报。耐心等待并更正内容营销策略&#xff0c;最终会发现你的网站很受用户欢迎。下面就教你如何利用开源思维开发一个SEO友好型网站&#xff01; 首先&#xff0c;你应该知道&#xff1a;93% 的网站…

修复开源VS Code 插件Trino Driver的三个小问题

前言 最近产品中使用到一款SQLTools的VS Code插件。该插件可以在VS Code中实现数据库管理&#xff0c;而且支持非常多的数据源类型&#xff0c; 官方的数据源类型有CockroachDB&#xff0c;MariaDB&#xff0c;MySQL&#xff0c;PostgreSQL&#xff0c;SQLite&#xff0c;Micr…

电脑录屏按哪个键?您可以这样操作!

案例&#xff1a;电脑按哪3个键&#xff0c;可以录屏&#xff1f; 【我平常喜欢使用快捷键在电脑上快速完成一些操作。最近接触到了电脑录屏&#xff0c;感觉使用它一系列的操作比较麻烦。想在这里问问小伙伴们&#xff0c;有没有使用快捷键成功操作过的朋友&#xff01;】 电…

【Linux】页表的深入分析

上一篇文章介绍了线程的基本概念 而本篇文章我们来深入理解一下, CPU再调度我们以往理解的进程和如今的线程都会涉及到的一个内容: 页表 文章目录深入理解页表 *页表的实际组成*什么是page&#xff1f;深入理解页表 * 在介绍进程时, 博主没有深入介绍过页表. 只是简单说了 页…

DAY 40 firewalld 防火墙

firewalld防火墙是centos7系统默认的防火墙管理工具&#xff0c;取代了之前的iptables防火墙&#xff0c;也是工作在网络层&#xff0c;属于包过滤防火墙。 支持IPv4、IPv6防火墙设置以及以太网桥支持服务或应用程序直接添加防火墙规则接口拥有两种配置模式&#xff1a;临时模…

【快乐手撕LeetCode题解系列】—— 环形链表 II

【快乐手撕LeetCode题解系列】—— 环形链表 II&#x1f60e;前言&#x1f64c;环形链表 II&#x1f64c;画图分析&#xff1a;&#x1f60d;思路分析&#xff1a;&#x1f60d;源代码分享&#xff1a;&#x1f60d;总结撒花&#x1f49e;&#x1f60e;博客昵称&#xff1a;博客…

了解oauth2.0

1 什么是 OAuth2.0 开发授权&#xff08;OAuth&#xff09;是一个开放标准&#xff0c;允许用户让第三方应用访问该用户在某一网站上存储的私密的资源&#xff08;如照片、视频、联系人列表等&#xff09;&#xff0c;而无需将用户名和密码提供给第三方应用。 OAuth 允许用户…

我的软件测试故事:成长、迷茫、奋斗

前言 测试工作6年&#xff0c;经历过不同产品、共事过不同专业背景、能力的同事&#xff0c;踩过测试各种坑、遇到过各种bug。测试职场生涯积极努力上进业务和技术能力快速进步过、也有努力付出却一无所得过、有对测试生涯前景充满希望认为一片朝气蓬勃过、也有对中年危机思考不…

OpenAI Embedding:快速实现聊天机器人(二)

theme: orange 本文正在参加「金石计划」 接上文OpenAI Embedding&#xff1a;快速实现聊天机器人(一)有讲到聊天机器人的一些概念&#xff0c;这篇开始讲讲这个聊天机器人的架构和流程。 总架构图 这里我参照一个现成的架构图来讲如何实现&#xff0c;其是基于Azure多个相关云…

香港进出口报关指南

由于香港优越的地理位置和政策支持&#xff0c;大部分外贸货物通过香港出口到世界各地。与内地海关相比&#xff0c;香港报关更简单快捷。司机可根据内地舱单填写一份香港进/出口舱单(俗称司机纸)进出香港海关&#xff0c;并在货物抵港后14天内申报。 香港进出口报关需要提供哪…

单机/集群/热备/磁盘阵列(RAID)的区别详解

一、单机部署&#xff08;stand-alone&#xff09; 单个服务器&#xff0c;只有一个饮水机提供服务&#xff0c;服务只部署一份。 二、集群部署&#xff08;cluster&#xff09; 服务器集群就是指将很多服务器集中起来一起进行同一种服务&#xff0c;在客户端看来就像是只有…

MySQL连接空闲时间超过8小时报错原因与延伸知识

1 错误原因 1.1 两个参数 MySQL服务端两个参数控制连接超时时间&#xff1a; wait_timeoutinteractive_timeout1.1.1 如何查看 show global variables like interactive_timeout show global variables like wait_timeout 复制代码 1.1.2 含义与区别 wait_timeout&#xf…