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

  • 相关阅读:
    Vue.js 转自http://zhuanlan.zhihu.com/evanyou/20302927
    Linux 下的终端
    图像热点(图像地图)
    网页多媒体 flash
    下拉列表
    <input> type 属性
    <form>表单
    表格结构
    简介
    <meta>标记
  • 原文地址:https://www.cnblogs.com/qican/p/15095344.html
Copyright © 2011-2022 走看看