首页 > 编程语言 >Python selenium过图片滑块验证

Python selenium过图片滑块验证

时间:2023-04-07 13:46:54浏览次数:33  
标签:distance random 滑块 Python res 0.2 selenium tracks image1

计算滑块移动距离

def get_distance(image1,image2):
    '''
      拿到滑动验证码需要移动的距离
      :param image1:没有缺口的图片对象
      :param image2:带缺口的图片对象
      :return:需要移动的距离
      '''
    # print('size', image1.size)

    threshold = 50
    for i in range(0,image1.size[0]):  # 260
        for j in range(0,image1.size[1]):  # 160
            pixel1 = image1.getpixel((i,j))
            pixel2 = image2.getpixel((i,j))
            res_R = abs(pixel1[0]-pixel2[0]) # 计算RGB差
            res_G = abs(pixel1[1] - pixel2[1])  # 计算RGB差
            res_B = abs(pixel1[2] - pixel2[2])  # 计算RGB差
            if res_R > threshold and res_G > threshold and res_B > threshold:
                return i-8  # 需要移动的距离

模拟人为拖动滑块

def get_track(distance):
    '''
    拿到移动轨迹,模仿人的滑动行为,先匀加速后匀减速
    匀变速运动基本公式:
    ①v=v0+at
    ②s=v0t+(1/2)at²
    ③v²-v0²=2as

    :param distance: 需要移动的距离
    :return: 存放每0.2秒移动的距离
    '''
    # 初速度
    v=0
    # 单位时间为0.2s来统计轨迹,轨迹即0.2内的位移
    t=0.2
    # 位移/轨迹列表,列表内的一个元素代表0.2s的位移
    tracks=[]
    # 当前的位移
    current=0
    # 到达mid值开始减速
    mid=int(distance) * 7/8

    distance += 10  # 先滑过一点,最后再反着滑动回来
    # a = random.randint(1,3)
    while current < distance:
        if current < mid:
            # 加速度越小,单位时间的位移越小,模拟的轨迹就越多越详细
            a = random.randint(2,4)  # 加速运动
        else:
            a = -random.randint(3,5) # 减速运动

        # 初速度
        v0 = v
        # 0.2秒时间内的位移
        s = v0*t+0.5*a*(t**2)
        # 当前的位置
        current += s
        # 添加到轨迹列表
        tracks.append(round(s))

        # 速度已经达到v,该速度作为下次的初速度
        v= v0+a*t

    # 反着滑动到大概准确位置
    for i in range(4):
       tracks.append(-random.randint(2,3))
    for i in range(4):
       tracks.append(-random.randint(1,3))
    return tracks

标签:distance,random,滑块,Python,res,0.2,selenium,tracks,image1
From: https://www.cnblogs.com/jruing/p/17295871.html

相关文章

  • Python调用TensorFlow时出现:FutureWarning: Passing (type, 1) or '1type' as a synon
    百度了很多说是numpy版本过高,将numpy版本降低即可,我降低为1.16.2但是会碰到pipuninstallnumpy卸载不掉的问题我一直忽视了是在conda创建的虚拟环境acc中运行的这个代码,进入cmdpipuninstall时没注意是在base环境下,还是在自己创建的虚拟环境下,一直uninstall不掉numpy,原因我......
  • Python 工程动画:将数学和数据带入生活
    Python工程动画:将数学和数据带入生活像电影一样呈现工程数据:在Matplotlib+数学+控制系统中为Python动画创建代码课程英文名:PythonengineeringanimationsBringmath&datatolife此视频教程共8.53GB,中英双语字幕,画质清晰无水印,源码附件全课程地址:https://xueshu.......
  • OpenAI Python API 训练营:学习使用 AI、GPT3 等!
    OpenAIPythonAPI训练营:学习使用AI、GPT3等!使用OpenAI强大的API在项目中生成文本和图像,探索人工智能的力量课程英文名:OpenAIPythonAPIBootcampLearntouseAI,GPT3,andmore!此视频教程共3.24GB,中英双语字幕,画质清晰无水印,源码附件全课程地址:https://xueshu.f......
  • opencv-python 4.14. 霍夫圆变换
    基础知识铺垫通过检索相关资料,学习到了霍夫圆检测的一点点皮毛知识,它的基本内容是认为图像上任何一个非零像素点,都有可能是一个潜在圆形上的一点。通过投票计算,生成累计坐标平面,然后在设置一个累计权重,去定位圆。在笛卡尔坐标系中圆的方程为(x-a)^2+(y-b)^2=r^2,其中(a,b......
  • python 检测视频区域是否有变化
    #!/usr/bin/envpython#coding:utf-8#@author:sSWans#@file:main.py#@time:2018/1/1115:54importosimportrandomfrom_datetimeimportdatetimeimportcv2path='d:\\C理论\\ti'#遍历目录下的视频文件defget_files(fpath):files_l......
  • python中sys模块常用的一些方法
    一、sys模块sys模块负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python的运行时环境。 sys.argv命令行参数List,第一个元素是程序本身路径sys.modules.keys()返回所有已经导入的模块列表sys.exc_info()获取当前正在处理的异常类,exc_type、exc_value......
  • python-argparse
    argparse模块是Python内置的用于命令项选项与参数解析的模块,argparse模块可以让人轻松编写用户友好的命令行接口,能够帮助程序员为模型定义参数。使用argparse配置命令行参数时,需要三步:创建命令行解析器对象argparse.ArgumentParser()对象给解析器添加命令行参数add_ar......
  • python_PIL图片拼接,符合需求但不完美!!
    仅能符合需求的图片拼接工具。。。使用第三方包为:importtkinterastkfromtkinterimportEntry,ButtonfromtkinterimportfiledialogfromPILimportImage工具的样子:图片拼接示例首先选择多个需要拼接的图片,然后回自动调整图片的宽度比,纵向拼接 拼接后就是这个样子......
  • Python 异步: 常见问题 Part_1(23)
    动动发财的小手,点个赞吧!本节回答开发人员在Python中使用asyncio时提出的常见问题。1.如何停止任务?我们可以通过asyncio.Task对象上的cancel()方法取消任务。如果任务被取消,cancel()方法返回True,否则返回False。...#cancelthetaskwas_cancelled=task.cancel......
  • 每日总结2023/4/6(python实现分型图形设计)
    importrandomimportturtleturtle.speed(100)defke_line(line_,n):ifn==0:turtle.fd(line_)else:line_len=line_//3foriin[0,60,-120,60]:turtle.left(i)ke_line(line_len,n-1)#原始线......