# 破解博客园登录验证# 1.输入用户名与密码并点击登录# 2.探出滑动验证,获取有缺口与完整的图片# 3.通过像素点进行对比,获取滑动距离# 4.模拟人的行为轨迹# 5.开始滑动

'''''''''破解极验滑动验证破解极验滑动验证博客园登录url:    https://account.cnblogs.com/signin?returnUrl=https%3A%2F%2Fwww.cnblogs.com%2F

代码逻辑:1、输入用户名与密码,并点击登录2、弹出滑动验证,获取有缺口与完整的图片3、通过像素点进行比对,获取滑动位移距离4、模拟人的行为轨迹5、开始滑动

'''from selenium import webdriver  # 用来驱动浏览器的from selenium.webdriver import ActionChains  # 破解滑动验证码的时候用的 可以拖动图片import timefrom PIL import Image  # pip3 install pillowimport random

# 截图图片函数def cut_image(driver):    # 获取整个页面图片,图片名字为'snap.png'    driver.save_screenshot('snap.png')

    # 获取滑动小画图    image = driver.find_element_by_class_name('geetest_canvas_img')    print(image.location)    print(image.size)

    # 获取小图片的左上右下的位置    left = image.location['x']    top = image.location['y']    right = left + image.size['width']    buttom = top + image.size['height']    print(left, top, right, buttom)

    # 调用open方法打开全屏图片并赋值给image_obj对象    image_obj = Image.open('snap.png')

    # 通过image_obj对象对小图片进行截取    # box: The crop rectangle, as a (left, upper, right, lower)-tuple.    img = image_obj.crop((left, top, right, buttom))    # 打开截取后的小图片    # img.show()    return img

# 获取完整图片def get_image1(driver):    time.sleep(2)

    # 修改document文档树,把完整图片的display属性修改为block    js_code = '''        var x = document.getElementsByClassName("geetest_canvas_fullbg")[0].style.display = "block";    '''

    # 执行js代码    driver.execute_script(js_code)

    # 截取图片    image = cut_image(driver)

    return image

# 获取有缺口图片def get_image2(driver):    time.sleep(2)

    # 修改document文档树,把完整图片的display属性修改为block    js_code = '''        var x = document.getElementsByClassName("geetest_canvas_fullbg")[0].style.display = "none";    '''

    # 执行js代码    driver.execute_script(js_code)

    # 截取图片    image = cut_image(driver)

    return image

# 获取滑块滑动距离def get_distance(image1, image2):    # 小滑块右侧位置    start = 60

    # 像素差    num = 60    print(image1.size)    for x in range(start, image1.size[0]):        for y in range(image1.size[1]):

            # 获取image1完整图片每一个坐标的像素点            rgb1 = image1.load()[x, y]

            # 获取image2缺口图片每一个坐标的像素点            rgb2 = image2.load()[x, y]            # (60, 86, 40) (60, 86, 40) rgb            print(rgb1, rgb2)

            # abs获取绝对值, 像素点比较的值            r = abs(rgb1[0] - rgb2[0])            g = abs(rgb1[1] - rgb2[1])            b = abs(rgb1[2] - rgb2[2])

            # 如果条件成立,则找到缺口位置            if not (r < num and g < num and b < num):                # 有误差 - 7像素                return x - 7

# 模拟人的滑动轨迹def get_strck_move(distance):    distance += 20

    '''    滑动行为轨迹    加速公式:        v = v0 + a * t

    路程公式:        s = v0 * t + 0.5 * a * (t ** 2)    '''

    # 初速度    v0 = 0

    # 时间    t = 0.2

    # 位置    s = 0

    # 滑动轨迹列表 向前滑动列表    move_list = []

    # 中间值,作为加减速度的位置    mid = distance / 5 * 3

    # 加减速度列表    v_list = [1, 2, 3, 4]

    # 循环位移    while s < distance:        if s < mid:            # 随机获取一个加速度            a = v_list[random.randint(0, len(v_list) - 1)]

        else:            # 随机获取一个减速度            a = -v_list[random.randint(0, len(v_list) - 1)]

        '''        匀加速\减速运行        v = v0 + a * t

        位移:        s = v * t + 0.5 * a * (t**2)        '''        # 获取初始速度        v = v0

        # 路程公式:        s1 = v * t + 0.5 * a * (t ** 2)        s1 = round(s1)  # 取整

        # 加速公式:        # v = v0 + a * t        m_v = v + a * t

        # 把当前加/减速度赋值给初始速度,以便下一次计算        v0 = m_v

        # 把位移添加到滑动列表中        move_list.append(s1)

        # 修改滑动初始距离        s += s1

    # 后退列表, 自定义后退滑动轨迹,必须是负值    back_list = [-1, -1, -2, -3, -2, -1, -1, -2, -3, -2, -1, -1]

    return {'move_list': move_list, 'back_list': back_list}

def main():    driver = webdriver.Chrome()    driver.implicitly_wait(10)    driver.get('https://account.cnblogs.com/signin?returnUrl=https%3A%2F%2Fwww.cnblogs.com%2F')

    # 1、输入用户名与密码,并点击登录    user_input = driver.find_element_by_id('LoginName')    user_input.send_keys('大蜘蛛007')    time.sleep(0.2)

    pwd_input = driver.find_element_by_id('Password')    pwd_input.send_keys('@bb18861558365')    time.sleep(2)

    login_submit = driver.find_element_by_id('submitBtn')    login_submit.click()

    # 2、获取完整的图片    image1 = get_image1(driver)

    # 3、获取有缺口图片    image2 = get_image2(driver)

    # 4、比对两张图片,获取滑动距离    distance = get_distance(image1, image2)    print(distance)

    # 5、模拟人的滑动轨迹    move_dict = get_strck_move(distance)    # 获取前进滑动轨迹    move_list = move_dict['move_list']    # 获取后退滑动轨迹    back_list = move_dict['back_list']

    # 6、开始滑动    move_tag = driver.find_element_by_class_name('geetest_slider_button')    # 点击摁住滑动按钮    ActionChains(driver).click_and_hold(move_tag).perform()

    # 向前滑动    for move in move_list:        ActionChains(driver).move_by_offset(xoffset=move, yoffset=0).perform()        time.sleep(0.1)

    time.sleep(0.1)

    # 向后滑动    for back in back_list:        ActionChains(driver).move_by_offset(xoffset=back, yoffset=0).perform()        time.sleep(0.1)

    # 制作微妙晃动    ActionChains(driver).move_by_offset(xoffset=3, yoffset=0).perform()    ActionChains(driver).move_by_offset(xoffset=-3, yoffset=0).perform()

    time.sleep(0.1)

    # 释放滑动按钮    ActionChains(driver).release().perform()

    time.sleep(100)

if __name__ == '__main__':    main()

转载于:https://www.cnblogs.com/7777qqq/p/11062449.html

python实训第七天相关推荐

  1. 大学python实训总结-千锋Python实训总结 学好基础才能走的更远

    时间飞逝,不知不觉在千锋学习Python已经一个月了,在这不长不短的一个月时间感觉我以往的生活方式和学习方式完全被改变了,希望我能继续保持这样的求学心态和学习态度.下面这个Python实训总结就是我对 ...

  2. Python实训day14pm【Python网络爬虫综合大作业-参考解析】

    Python实训-15天-博客汇总表 题目:天气数据的爬取和统计 大作业题目思路引导:定时爬取每个地级市的实时天气状况.存入excel中.为每个城市生成html展示.历史excel文件以每日为单位归档 ...

  3. Python实训day14am【Python网络爬虫综合大作业-答辩】

    Python实训-15天-博客汇总表 实训总结: 由浅入深的了解了python语言应用: 编写了很多案例,完成了发作业,提升了编程思路和能力: 了解了行业现状,认识到企业对人才的要求,去除焦虑,对后续 ...

  4. Python实训day13am【Python网络爬虫综合大作业PPT】

    Python实训-15天-博客汇总表   今天上午大家抓紧时间继续完成实训报告和PPT,有问题我会在群里跟大家说明, 暂时不用上线直播了. 实训结束后,我会在博客上发布网络爬虫综合大作业题目及解析.

  5. Python实训day12pm【答辩要求、定时器】

    Python实训-15天-博客汇总表 目录 1.答辩安排 2.定时器 1.答辩安排 下午安排: 今天尽量地完成整个项目: 明天完成实训报告,制作小答辩PPT: 后天答辩. PPT要求: 时长5分钟左右 ...

  6. Python实训day12am【网络爬虫大作业简略解析:动态生成html页面、数据写入Excel】

    Python实训-15天-博客汇总表 目录 1.HTML页面设计 2.生成每个城市的HTML页面 2.1.HTML页面代码(weatherTemplate.html) 2.2.实例代码-动态生成htm ...

  7. Python实训day11pm【大作业简略解析】

    Python实训-15天-博客汇总表 目录 1.课堂笔记 2.群消息 3.代码 3.1.demo1 3.2.demo2 1.课堂笔记 大作业题目思路引导: 题目1:定时爬取每个地级市的实时天气状况.存 ...

  8. Python实训day11am【大作业思路梳理】

    Python实训-15天-博客汇总表 定时任务:定时任务框架APScheduler学习详解 - 小学弟- - 博客园

  9. Python实训day10pm【os模块-处理Excel统计学生观看直播时长】

    Python实训-15天-博客汇总表 学以致用,课堂练习:考勤目录中存放的是所有的考勤excel表格,从第1天~第9天,表中关键的信息就是,学生当天看了多久的直播. 要求,利用所学知识,读取每个exc ...

最新文章

  1. 希望的背后……感谢青鸟、感谢51cto、感谢帮助过我的人们
  2. C++获取文件夹下所有文件名
  3. 怎么撤销定时说说_已注册商标遇到撤三申请怎么办
  4. 穷的时候要记住这5点,才能有机会翻身
  5. IOS 预览pdf,word文档的集中方式
  6. JSTL迭代操作--c:forEach,c:forTokens
  7. java实现复制文件目录及文件到指定路径下
  8. 智能家居通信协议科普,什么户型选择什么产品一文看懂
  9. 苹果电脑上不错的svn客户端
  10. CSS-DIV页面布局
  11. F和弦(大横按)的训练方法
  12. 股票期货盈亏比的计算,胜率与盈亏比的关系
  13. 关于length specifier
  14. 官方原版系统、纯净版系统和Ghost版系统的区别在哪里?
  15. 计算机维修志愿活动策划书,“义务维修,温暖校园”志愿服务活动策划书
  16. 网易云信Web IM入门(一)
  17. 中国武术职业联赛(WMA)
  18. 十大家用智能监控摄像头品牌排名
  19. [附源码]Python计算机毕业设计SSM旅行组团服务管理系统(程序+LW)
  20. 网狐框架分析一 -- 150616

热门文章

  1. 神在夏至祭降下了神谕(oracle)
  2. 浏览器插件 火狐插件
  3. CSS选择器笔记,element element和element element 的区别
  4. eclipse rcp 多线程
  5. django 之 session
  6. 【spring 配置文件】spring配置文件的解析
  7. “中国式招标”的一些趣闻
  8. Windows 服务器安全维护知识
  9. Oracle EBS常用数据表
  10. Online Shopping网上商城数据库设计