首页 > 其他分享 >滑动验证码-移动滑块

滑动验证码-移动滑块

时间:2023-07-09 14:45:26浏览次数:32  
标签:webdriver 滑块 selenium cv2 验证码 import imgs 滑动 png

滑动验证码-移动滑块

image-20220809215530804

思路:

  • 获取滑块
  • 建立动作
  • 根据滑动的速度滑动
    from selenium.webdriver.chrome.service import Service
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from fake_useragent import UserAgent
    import requests
    from time import sleep
    
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'}
    
    import cv2
    def get_long():
        # 导入图片
        img1 = cv2.imread('./imgs/cpt1.png')
        img2 = cv2.imread('./imgs/cpt2.png')
        # 边缘化图片
        canny1 = cv2.Canny(img1,300,800)
        canny2 = cv2.Canny(img2,250,500)
        # 保存图片
        cv2.imwrite('./imgs/tcpt1.png',canny1)
        cv2.imwrite('./imgs/tcpt2.png',canny2)
        # 加载要匹配的图片
        big = cv2.imread('./imgs/tcpt1.png')
        small = cv2.imread('./imgs/tcpt2.png')
        # 匹配图片
        rs = cv2.matchTemplate(big,small,cv2.TM_CCORR_NORMED)
        # 显示结果统计
        min_val,max_val,min_loc,max_loc = cv2.minMaxLoc(rs)
        return max_loc[0]/big.shape[1]*340
    
    def get_track(distance):
        track = []
        # 从什么地方开始滑动
        current = 0
        # 减速的阈值
        mid = distance*4/5
        # 时间
        t = 0.2
        # 速度
        v = 0
    
        while current < distance:
            if current <mid:
                a = 2
            else:
                a = -3
            v0 = v
            v = v0 + a*t
            move = v0*t + 1/2*a*t*t
            track.append(round(move))#加入移动轨迹
            current += move #记录当前位置
    
        track.append(distance - sum(track)) 
        return track,sum(track)
    
    def get_img():
        # 创建驱动服务:
        s = Service('./chromedriver.exe')
        # 创建chrome浏览器
        driver = webdriver.Chrome(service = s)
        # 访问指定网站
        driver.get('https://www.ssssssssss.com/chn/sc/waybill/waybill-detail/xxxxxx')
        # 设置全局等待对象
        wait = WebDriverWait(driver,100)
        # 设置等待iframe加载完成
        wait.until(EC.presence_of_all_elements_located((By.XPATH,"//iframe[@id='tcaptcha_iframe']")))
        # 切换到frame
        driver.switch_to.frame("tcaptcha_iframe")
        sleep(3)
        # 获取图片src
        wait.until(EC.presence_of_all_elements_located((By.XPATH,"//div[@id='slideBgWrap']/img")))
        img = driver.find_element(By.XPATH,"//div[@id='slideBgWrap']/img")
        img_src = img.get_attribute('src')
        img_src = img_src[:img_src.rfind('&')-1]
        print(img_src)
        # 保存图片
        save_image(f'{img_src}1','cpt1.png')
        save_image(f'{img_src}2','cpt2.png')
    
        # 滑动验证,
        # 获取滑动的距离
        distance = get_long()
        # 获取滑动的轨迹
        track,long = get_track(distance)
        # 操作selenium滑动滑块  
        # 点击滑块
        button = driver.find_element(By.XPATH,"//div[@id='tcaptcha_drag_thumb']")
        webdriver.ActionChains(driver).click_and_hold(button).perform()
        # 进行拖拽
        for t in track:
            # 开始拖拽
            webdriver.ActionChains(driver).move_by_offset(xoffset=t,yoffset=0).perform()
        # 释放拖拽
        webdriver.ActionChains(driver).release().perform()
        driver.close()
    
    def save_image(url,file_name):
        resp = requests.get(url,headers=headers)
        with open(f'./imgs/{file_name}','wb') as f:
            f.write(resp.content)
    
    if __name__ == '__main__':
        get_img()

     

标签:webdriver,滑块,selenium,cv2,验证码,import,imgs,滑动,png
From: https://www.cnblogs.com/jiangjiayun/p/17538711.html

相关文章

  • 滑动验证码-编辑移动轨迹
    滑动验证码-编辑移动轨迹思路:建立每次移动的距离,使用时,移动获取距离拖动滑块儿即可。提示滑动的距离不能随意设置,需要复合人类行为。推荐参考,高中物理了解过的知识:均变速直线运动的速度与时间关系的公式:V=V0+at均变速直线运动的位移与时间关系的公式:x=v0t+½at²'''1、......
  • 滑动验证码-获取滑动长度
    滑动验证码-获取滑动长度思路:为了更快精准的找出滑动的距离,因此可以给图片做适当的处理灰度化。所谓灰度,就是图像没有色彩。举个例子,原本的彩色图片是有RGB三种颜色组成的(也就是每个像素点由三个值),现在给图像灰度化,每个像素点只有一个值(0-255)表示颜色的深度为了方......
  • 滑动验证码-保存图片
    滑动验证码-保存图片https://www.sf-express.com/we/ow/chn/sc/waybill/list#保存图片fromselenium.webdriver.chrome.serviceimportServicefromseleniumimportwebdriverfromselenium.webdriver.support.uiimportWebDriverWaitfromselenium.webdriver.common.by......
  • 长度最小的子数组滑动窗口
    /***给定一个含有n个正整数的数组和一个正整数s,找出该数组中满足其和≥s的长度最小的连续子数组,并返回其长度。如果不存在符合条件的子数组,返回0。**长度最小的子数组*示例:**输入:s=7,nums=[2,3,1,2,4,3]输出:2解释:子数......
  • Unity UGUI的Slider(滑动条)件组的介绍及使用
    UnityUGUI的Slider(滑动条)件组的介绍及使用1.什么是Slider组件?Slider(滑动条)是UnityUGUI中的一种常用UI组件用,于在用户界面中实现滑动选择的功能。通过拖动滑块,用户可以选择一个数值范围的内值。2.Slider组件的工作原理Slider组件由两部分组成:滑动区域和滑块。滑动区域用于显......
  • 【验证码逆向专栏】某度滑块、点选、旋转验证码 v1、v2 逆向分析
    声明本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作......
  • 超级鹰识别验证码
    超级鹰识别验证码http://www.chaojiying.com/思路:获取图片内容提交给打码平台获取验证码提交并验证数据提示只要平台支持,基本都可以使用。比如,识别英文,数字,汉字,做题等fromchaojiying_Python.chaojiyingimportChaojiying_Clientdefpic_str(image,pic_type=19......
  • 验证码-手动输入
    验证码-手动输入思路:获取验证码输入验证码提交并验证数据提示可以输入任意非行为验证码,比如:识别英文,数字,汉字,做题等fromemailimportheaderimportrequestsfromfake_useragentimportUserAgent#获取一个可以保存session的请求对象session=requests.Sessi......
  • 滑动窗口
    1.关于常用方法的介绍,在一个区间内寻找最大值或者最小值。题目链接:154.滑动窗口-AcWing题库举例,在一个长度为s数组中,窗口的大小为k,窗口从最左侧开始进行移动,输出窗口中最大和最小的两个元素。2.思考,在窗口的移动过程中,不断有旧的元素消失,新的元素进来,即先进先出,符合队列的......
  • 网安--验证码
    验证码作用 分类静态验证码 问答式验证码行为验证码   间接式验证码 无感验证码验证码的实现下载源码文件验证码自动识别ocropticalcharacterrecognition 远程ocr识别 使用api接口 ......