最新公告
  • 欢迎光临可关玩日记,免费分享生活知识及创业资讯
  • 滑动验证免费(滑动验证是什么)

    滑动验证免费(滑动验证是什么)

    很多朋友反馈,在web自动化的过程中,经常被登录验证码卡住,不知道验证码怎么过。今天我要和大家聊聊验证码。照例我们都可以找开发帮忙解决验证码,关闭验证码或者给一个通用验证码!那么如果开发不提供协助,我们有什么设施来处理这些验证码呢?答案当然是有的。常见的验证码照例分为两类,一类是图形验证码,一类是滑动验证码!

    关于图形识别的验证码,之前也有过相关的识别解决方案。今天就不做太多介绍了。有兴趣的朋友可以私聊领取配套视频资料。今天主要讲一下如何识别和破解滑动验证码。

    滑动验证破解思绪

    一般来说,滑动验证码破解的思路是以下两步:

    1.获得滑块的滑动距离。

    2.模拟拖动滑块,通过验证。

    比较起来听起来很简单,但是要得到滑块的滑动距离,大部分朋友都没有思想,不知道怎么得到。不难得到。至于这个滑动验证码,滑块和gap backer都是张自力的图片。我们可以下载这两张图片,借助图像识别技术在靠山图中识别缺口的位置,然后减去滑块的当前位置,得到滑动的距离。这时很多朋友会觉得我不懂图像识别技术,也无所谓。后面会给大家一个打包的滑块识别模块。只要传入滑块和间隙靠山图的元素节点,就可以计算出滑块的间隙位置。

    如何做网络推广营销,网络推广具体操作方案!

    案例讲解
    话不多说,我们来看一个案例(QQ空之间登录),用到了自己打包的一个滑动距离slideVerfication模块,有需要的朋友可以私信获取。Qq空登录案例实现步骤如下:

    1.创建一个驱动程序工具来满足qq登录页面。

    2.输入帐户密码。

    3.单击登录

    4.模拟滑动验证

    实现代码
    “””============================Author:柠檬班-木森Time:2020/4/20 20:12E-mail:3247119728@qq.comCompany:湖南零檬信息手艺有限公司============================”””import timefrom selenium import webdriverfrom slideVerfication import SlideVerificationCode# 1、建立一个driver工具,接见qq登录页面browser = webdriver.Chrome()browser.get(“https://qzone.qq.com/”)# 2、输入账号密码# 2.0 点击切换到登录的iframebrowser.switch_to.frame(‘login_frame’)# 2.1 点击账号密码登录browser.find_element_by_id(‘switcher_plogin’).click()# 2.2定位账号输入框,输入账号browser.find_element_by_id(“u”).send_keys(“123292678”)# 2.3定位密码输入输入密码browser.find_element_by_id(“p”).send_keys(“PYTHON01”)# 3、点击登录browser.find_element_by_id(‘login_button’).click()time.sleep(3)# 4、模拟滑动验证# 4.1切换到滑动验证码的iframe中tcaptcha = browser.find_element_by_id(“tcaptcha_iframe”)browser.switch_to.frame(tcaptcha)# 4.2 获取滑动相关的元素# 选择拖动滑块的节点slide_element = browser.find_element_by_id(‘tcaptcha_drag_thumb’)# 获取滑块图片的节点slideBlock_ele = browser.find_element_by_id(‘slideBlock’)# 获取缺口靠山图片节点slideBg = browser.find_element_by_id(‘slideBg’)# 4.3盘算滑动距离sc = SlideVerificationCode(save_image=True)distance = sc.get_element_slide_distance(slideBlock_ele,slideBg)# 滑动距离误差校正,滑动距离*图片在网页上显示的缩放比-滑块相对的初始位置distance = distance*(280/680) – 22print(“校正后的滑动距离”,distance)# 4.4、举行滑动sc.slide_verification(browser,slide_element,distance=100)
    运行效果:

    滑动验证码的识别问题就这样解决了,下面给大家讲讲封装的slideVerfication模块的识别原理。其实这个模块的图像识别也是借助第三方图像处理模块进行的。python中有很多现成的库可以处理图片,我在这里用opencv-python来识别。幻灯片验证模块中上述两种方法的部门参考代码如下:

    def get_element_slide_distance(self, slider_ele, background_ele, correct=0): “”” 凭据传入滑块,和靠山的节点,盘算滑块的距离 该方式只能盘算 滑块和靠山图都是一张完整图片的场景, 若是靠山图是通过多张小图拼接起来的靠山图, 该方式不适用,请使用get_image_slide_distance这个方式 :param slider_ele: 滑块图片的节点 :type slider_ele: WebElement :param background_ele: 靠山图的节点 :type background_ele:WebElement :param correct:滑块缺口截图的修正值,默以为0,调试截图是否准确的情况下才会用 :type: int :return: 靠山图缺口位置的X轴坐标位置(缺口图片左界限位置) “”” # 获取验证码的图片 slider_url = slider_ele.get_attribute(“src”) background_url = background_ele.get_attribute(“src”) # 下载验证码靠山图,滑动图片 slider = “slider.jpg” background = “background.jpg” self.onload_save_img(slider_url, slider) self.onload_save_img(background_url, background) # 读取举行色度图片,转换为numpy中的数组类型数据, slider_pic = cv2.imread(slider, 0) background_pic = cv2.imread(background, 0) # 获取缺口图数组的形状 –gt;缺口图的宽和高 width, height = slider_pic.shape[::-1] # 将处置之后的图片另存 slider01 = “slider01.jpg” background_01 = “background01.jpg” cv2.imwrite(background_01, background_pic) cv2.imwrite(slider01, slider_pic) # 读取另存的滑块图 slider_pic = cv2.imread(slider01) # 举行色彩转换 slider_pic = cv2.cvtColor(slider_pic, cv2.COLOR_BGR2GRAY) # 获取色差的绝对值 slider_pic = abs(255 – slider_pic) # 保留图片 cv2.imwrite(slider01, slider_pic) # 读取滑块 slider_pic = cv2.imread(slider01) # 读取靠山图 background_pic = cv2.imread(background_01) # 对照两张图的重叠区域 result = cv2.matchTemplate(slider_pic, background_pic, cv2.TM_CCOEFF_NORMED) # 获取图片的缺口位置 top, left = np.unravel_index(result.argmax(), result.shape) # 靠山图中的图片缺口坐标位置 print(“当前滑块的缺口位置:”, (left, top, left + width, top + height)) return left
    def slide_verification(self, driver, slide_element, distance): “”” 滑动滑块举行验证 :param driver: driver工具 :type driver:webdriver.Chrome :param slide_element: 滑块的元组 :type slider_ele: WebElement :param distance: 滑动的距离 :type: int :return: “”” # 获取滑动前页面的url地址 start_url = driver.current_url print(“需要滑动的距离为:”, distance) # 凭据滑动距离天生滑动轨迹 locus = self.get_slide_locus(distance) print(“天生的滑动轨迹为:{},轨迹的距离之和为{}”.format(locus, distance)) # 按下鼠标左键 ActionChains(driver).click_and_hold(slide_element).perform() time.sleep(0.5) # 遍历轨迹举行滑动 for loc in locus: time.sleep(0.01) ActionChains(driver).move_by_offset(loc, random.randint(-5, 5)).perform() ActionChains(driver).context_click(slide_element) # 释放鼠标 ActionChains(driver).release(on_element=slide_element).perform()

    关于滑动验证码的识别,大家分享到这里。以上解决方案也有相应的讲解视频。