• 破解验证码模拟登陆cnblogs


    from selenium import webdriver
    from selenium.webdriver import ActionChains
    from PIL import Image 
    import time
    
    def get_snap(driver):
        driver.save_screenshot('snap.png')
        snap_obj=Image.open('snap.png')
        return snap_obj
    
    def get_image(driver):
        img=driver.find_element_by_class_name('geetest_canvas_img')
        time.sleep(2) #等待图片加载完毕
        size=img.size
        location=img.location
    
        left=location['x']
        top=location['y']
        right=left+size['width']
        bottom=top+size['height']
    
        snap_obj=get_snap(driver)
        image_obj=snap_obj.crop((left,top,right,bottom))
        # image_obj.show()
        return image_obj
    
    def get_distance(image1,image2):
        start_x=58
        threhold=60
        # print(image1.size)
        # print(image2.size)
        for x in range(start_x,image1.size[0]):
            for y in range(image1.size[1]):
                rgb1=image1.load()[x,y]
                rgb2=image2.load()[x,y]
                res1=abs(rgb1[0]-rgb2[0])
                res2=abs(rgb1[1]-rgb2[1])
                res3=abs(rgb1[2]-rgb2[2])
                if not (res1 < threhold and res2 < threhold and res3 < threhold):
                    return x-7
    
    def get_tracks(distance):
        distance+=20
        #s=v*t+0.5*a*(t**2)
    
        v0=0
        s=0
        t=0.5
        mid=distance*3/5
        forward_tracks=[]
    
        while s < distance:
            if s < mid:
                a=2
            else:
                a=-3
    
            v=v0
            track=v*t+0.2*a*(t**2)
            track=round(track)
            v0=v+a*t
            s+=track
            forward_tracks.append(track)
        back_tracks=[-1,-2,-2,-3,-2,-2,-1]
        xxx = [-1,-2,-2,-1,-1,-1]#20
        return {"forward_tracks":forward_tracks,'back_tracks':back_tracks,'xxx':xxx}
    
    try:
        driver = webdriver.Chrome()
        driver.get('https://passport.cnblogs.com/user/signin')
        driver.implicitly_wait(3)
    
        #1、输入账号、密码,然后点击登陆
        input_user=driver.find_element_by_id('input1')
        input_pwd=driver.find_element_by_id('input2')
        login_button=driver.find_element_by_id('signin')
    
        input_user.send_keys('Fugui')
        input_pwd.send_keys('xxxx')
        login_button.click()
    
        #2、点击按钮,弹出没有缺口的图
        button=driver.find_element_by_class_name('geetest_radar_tip')
        button.click()
    
        #3、针对没有缺口的图片进行截图
        image1=get_image(driver)
    
        #4、点击滑动按钮,弹出有缺口的图
        slider_button=driver.find_element_by_class_name('geetest_slider_button')
        slider_button.click()
    
        #5、针对有缺口的图片进行截图
        image2=get_image(driver)
    
        #6、对比两张图片,找出缺口,即滑动的位移
        distance=get_distance(image1,image2)
        # print(distance)
    
        #7、按照人的行为行为习惯,把总位移切成一段段小的位移
        traks_dic=get_tracks(distance)
    
        #8、按照位移移动
        slider_button=driver.find_element_by_class_name('geetest_slider_button')
        ActionChains(driver).click_and_hold(slider_button).perform()
        #先向前移动
        forward_tracks=traks_dic["forward_tracks"]
        back_tracks=traks_dic["back_tracks"]
        xxx=traks_dic["xxx"]
        for forward_track in forward_tracks:
            ActionChains(driver).move_by_offset(xoffset=forward_track,yoffset=0).perform()
    
        #短暂停顿
        time.sleep(0.2)
    
        # 先向后移动
        for back_track in back_tracks:
            ActionChains(driver).move_by_offset(xoffset=back_track,yoffset=0).perform()
            
        time.sleep(0.3)
        
        for xx in xxx:
            ActionChains(driver).move_by_offset(xoffset=xx,yoffset=0).perform()
    
        ActionChains(driver).move_by_offset(xoffset=-3,yoffset=0).perform()
        ActionChains(driver).move_by_offset(xoffset=3,yoffset=0).perform()
        time.sleep(0.3)
        ActionChains(driver).release().perform()
        time.sleep(10)
    finally:
        driver.quit()
  • 相关阅读:
    【ci框架】ci框架目录结构分析
    php CI框架
    jQuery boxy弹出层插件中文演示及讲解
    Jenkins构建报错(Jenkins is reserved for jobs with matching label expression)解决办法
    redis缓存数据架构实战
    Git免密码pull&push
    Maven搭建Nexus私有仓库
    Windows使用filezilla搭建FTP服务器
    CentOS7.4使用yum安装MySQL5.6
    MySQL数据库连接池导致页面登录无法查询问题解决过程
  • 原文地址:https://www.cnblogs.com/yifugui/p/8311894.html
Copyright © 2020-2023  润新知