破解极限滑动认证
from selenium import webdriver
from selenium.webdriver import ActionChains
from PIL import Image
import time
import random # 截取图片函数
def cut_image(driver):
driver.save_screenshot('image.png') img = driver.find_element_by_class_name('geetest_canvas_img') left = img.location['x']
upper = img.location['y'] right = left + img.size['width']
lower = upper + img.size['height'] image_obj = Image.open('image.png')
img_cut = image_obj.crop((left, upper, right, lower))
# img_cut.show()
return img_cut # 得到完整图片
def get_image1(driver): js_code = '''
var x = document.getElementsByClassName('geetest_canvas_fullbg')[0].style.display="block";
console.log(x)
''' time.sleep(0.2)
driver.execute_script(js_code) time.sleep(0.2)
img1 = cut_image(driver) return img1 # 得到缺口图片
def get_image2(driver):
js_code = '''
var x = document.getElementsByClassName('geetest_canvas_fullbg')[0].style.display="none";
console.log(x)
''' time.sleep(0.2)
driver.execute_script(js_code) time.sleep(0.2)
img2 = cut_image(driver) return img2 # 对比图片,得到滑动距离
def get_distance(img1, img2): # 小滑块右侧位置
start_location = 60 # 像素差
threshold = 60 for i in range(start_location, img1.size[0]):
for j in range(img1.size[1]): # 获得点(i,j)处的RGB像素值
rgb1 = img1.load()[i, j]
rgb2 = img2.load()[i, j]
r = abs(rgb1[0] - rgb2[0])
g = abs(rgb1[1] - rgb2[1])
b = abs(rgb1[2] - rgb2[2]) if not (r < threshold and g < threshold and b < threshold):
# 有误差,减去7
return i-7 def get_tracks(distance):
distance += 20
v0 = 0
a_list = [3, 4, 5]
t = 0.2
s = 0 # 向前滑动轨迹
forward_tracks = []
mid = distance * 3 / 5
while s < distance:
if s < mid:
a = a_list[random.randint(0, 2)]
else:
a = -a_list[random.randint(0, 2)] v = v0
stack = v * t + 0.5 * a * (t ** 2) # 每次拿到的位移
stack = round(stack)
s += stack
v0 = v + a * t forward_tracks.append(stack) back_tracks = [-1, -1, -2, -3, -2, -3, -2, -2, -3, -1] return {'forward_tracks': forward_tracks, 'back_tracks': back_tracks} def main(user, pwd): driver = webdriver.Chrome()
driver.maximize_window() try:
driver.implicitly_wait(10)
driver.get('https://account.cnblogs.com/signin?returnUrl=https%3A%2F%2Fwww.cnblogs.com%2F') username = driver.find_element_by_id('LoginName')
username.send_keys(user)
time.sleep(1) password = driver.find_element_by_id('Password')
password.send_keys(pwd)
time.sleep(1) submit = driver.find_element_by_id('submitBtn')
submit.click()
time.sleep(1) # 获取完整图片
img1 = get_image1(driver) # 获取缺口图片
img2 = get_image2(driver) # 获取移动距离
distance = get_distance(img1, img2) # 获取滑动轨迹,模拟人的滑动轨迹
tracks = get_tracks(distance) button = driver.find_element_by_class_name('geetest_slider_button')
ActionChains(driver).click_and_hold(button).perform() for forward_track in tracks['forward_tracks']:
ActionChains(driver).move_by_offset(xoffset=forward_track, yoffset=0).perform()
time.sleep(0.2) for back_track in tracks['back_tracks']:
ActionChains(driver).move_by_offset(xoffset=back_track, 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.1) ActionChains(driver).release().perform()
time.sleep(3)
finally:
driver.close() if __name__ == '__main__': user = '********'
pwd = '****************'
main(user, pwd)

 

python_07的更多相关文章

  1. python_07 函数作用域、匿名函数

    函数的作用域:无论在哪个地方调用函数,函数运行过程中的作用域只跟定义的时候有关,跟在哪个地方调用无关. name='alex' def foo(): name = 'linhaifeng' def b ...

随机推荐

  1. python类方法@classmethod与@staticmethod

    目录 python类方法@classmethod与@staticmethod 一.@classmethod 介绍 语法 举例 二.@staticmethod 介绍 语法 举例 python类方法@cl ...

  2. 【原创】docker在Ubuntu下1小时快速学习

    前言 由于工作原因,很多情况下需要快速学习新的知识,针对docker如果从头到尾看相关书籍学习会非常慢,所以整理了下docker的常用操作,只要跟着本文学习操作,一小时就能掌握docker大部最常用分 ...

  3. Redis 文章一 之持久化机制的介绍

    我们已经知道对于一个企业级的redis架构来说,持久化是不可减少的 企业级redis集群架构:海量数据.高并发.高可用 持久化主要是做灾难恢复,数据恢复,也可以归类到高可用的一个环节里面去,比如你re ...

  4. Activity 学习(一) 插件安装篇

    目录 Ider下安装 Eclipse下安装 Ider安装图解 首先,创建一个普通的Java工程即可,然后按照下面流程进行: 1:点击菜单中的File(最左上角),选择settings 2:plugin ...

  5. 用Wireshark抓包分析请求

    前言 有些封装好的API把错误都屏蔽掉,直接返回某一个不明确的具体错误,让人感到困惑. //code in SDK read-only public static Data requestHandle ...

  6. C语言中的isalpha,isdigit,islower,isupper等一系列函数

    TITLE:c语言中的isalpha,isdigit,islower,isupper等一系列函数 已经全部验证检查,无任何错误 isalnum(测试字符是否为英文或数字) 相关函数 isalpha,i ...

  7. OptimalSolution(1)--递归和动态规划(2)矩阵的最小路径和与换钱的最少货币数问题

    一.矩阵的最小路径和 1 3 5 9 1 4 9 18 1 4 9 18 8 1 3 4 9 9 5 8 12 5 0 6 1 14 14 5 11 12 8 8 4 0 22 22 13 15 12 ...

  8. django-模板之comment标签(六)

    index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  9. Pycharm 专业版激活码(转) 有效期到2020/06月

    亲测有效!!! 有效期截止为2020年06月,多谢大家支持与讨论! K6IXATEF43-eyJsaWNlbnNlSWQiOiJLNklYQVRFRjQzIiwibGljZW5zZWVOYW1lIjo ...

  10. 以Mnist为例从头开始自己建立数据集,搭建resnet34,识别Mnist

    写在前面: 本人小白研一,刚开始学习深度学习,将自己的第一个实验过程总结下来,看了很多的大牛的博客,在下面的程序中也参考了很多大牛的博客.在刚开始入门的学习的时候,直接编写程序下载数据集,但是后来觉得 ...