zoukankan      html  css  js  c++  java
  • selenium---滑动框验证码破解

    前言

    目前常见的验证码有很多种,比如数字验证码,滑动验证码,以及滑动补全图像验证码等,关于验证码的操作属于我们在UI自动化很大的一个障碍,今天安静来介绍下如何通过python来实现我们滑动验证码

    滑动验证码

    安静先来一张图,认识下今天将要破解的滑动验证码长什么样子。

    思路

    按照我们正常操作,首先通过按住滑动验证码,然后进行往右进行移动。这里的这个操作肯定很多人就会说,我们可以用selenium中的模拟鼠标操作,对的安静今天就通过selenium中的鼠标操作来完成。当然前提肯定是先进行定位滑动框。这里还需要查看通过鼠标移动多少坐标点,因为手动操作时候,可以很清楚的看出来移动到哪里,但是代码层次不清楚,你想要移动多远。思路清楚了,那就直接上手进行做吧

    实践

    通过F12进行查看。发现元素下面出现了伪元素(就是本身不存在的页面元素,HTML代码里并没有这样的元素,但在页面显示时,你却能看到这些本来不存在的元素发挥着作用)那么这里通过CSS进行定位。

    手动进行滑动,查看下我们要移动多少坐标点,当我们移动过程中会发现HTML有个属性style一直在变化,当移动到底后发现值不会变化了,就是我们的移动的坐标点。这里通过F12查看到了想要的偏移量和移动的元素内容,接下来进行代码方法实践

    编写代码,这里安静就直接上代码了,代码中有注释,
    from selenium import webdriver
    # 导入selenium中鼠标库
    from selenium.webdriver import ActionChains
    import time
    driver = webdriver.Chrome()
    driver.get("https://www.jq22.com/yanshi23642")
    # 页面最大化
    driver.maximize_window()
    # 跳转到iframe中
    driver.switch_to.frame('iframe')
    # 在输入框中输入内容
    driver.find_element_by_name('title').send_keys('123456')
    # 通过CSS定位滑动点坐标
    slider = driver.find_element_by_css_selector('div.slider-btn.layui-icon.layui-icon-next')
    time.sleep(5)
    action = ActionChains(driver)
    # 长按鼠标
    action.click_and_hold(slider)
    # 偏移量(F12中查看)
    action.move_by_offset(268, 0)
    # 释放鼠标
    action.release()
    # 执行以上操作
    action.perform()

    通过执行代码后,就会发现已经实现了。

    验证是否成功

    上面的代码和思路都很清楚了,那么如果我们想对他进行断言呢?这里会看到其实有提示“滑动验证通过”,我们可以通过显示等待的方法进行定位,如果出现字体正确,则说明滑动验证码已经通过。

    定位文本弹出框

    对于这种一而过的toast,当文本弹出来时候,可以通过F12中的sources点击暂停,然后再去查看元素内容

    元素内容:

    直接在代码中进行定位元素然后获取其中的text属性即可。

    from selenium import webdriver
    # 导入selenium中鼠标库
    from selenium.webdriver import ActionChains
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    import time
    driver = webdriver.Chrome()
    driver.get("https://www.jq22.com/yanshi23642")
    # 页面最大化
    driver.maximize_window()
    # 跳转到iframe中
    driver.switch_to.frame('iframe')
    # 在输入框中输入内容
    driver.find_element_by_name('title').send_keys('123456')
    # 通过CSS定位滑动点坐标
    slider = driver.find_element_by_css_selector('div.slider-btn.layui-icon.layui-icon-next')
    time.sleep(5)
    action = ActionChains(driver)
    # 长按鼠标
    action.click_and_hold(slider)
    # 偏移量(F12中查看)
    action.move_by_offset(268, 0)
    # 释放鼠标
    action.release()
    # 执行以上操作
    action.perform()
    time.sleep(1)
    # 元素属性
    locator = (By.CLASS_NAME,'layui-layer-content')
    # 通过显示等待进行定位元素
    WebDriverWait(driver, 20,0.5).until(EC.presence_of_element_located(locator))
    # 获取元素属性值
    text = driver.find_element_by_class_name('layui-layer-content').text
    print(text)
    assert text == '滑块验证通过'

    通过执行后发现已经将我们的弹出的文本框定位到了。

    总结

    通过这一篇文章简单的介绍了如何通过python+selenium中的鼠标操作来完成滑动框验证码的实现。读完文章会发现,其实也很简单。就是通过定位滑动框,通过滑动偏移量来实现。其中涉及到的知识点可能就是一个伪元素的定位,以及一闪而过的文本弹出框。好了,感谢您的阅读,希望对您有所帮助。

  • 相关阅读:
    MVC ORM 架构
    Kubernetes 第八章 Pod 控制器
    Kubernetes 第七章 Configure Liveness and Readiness Probes
    Kubernetes 第六章 pod 资源对象
    Kubernetes 第五章 YAML
    Kubernetes 核心组件
    Kubernetes 架构原理
    Kubernetes 第四章 kubectl
    Kubernetes 第三章 kubeadm
    yum 配置及yum 源配置
  • 原文地址:https://www.cnblogs.com/qican/p/15095344.html
Copyright © 2011-2022 走看看