jQuery火箭图标返回顶部代码

代码:

Chaojiying.py:

 1 #!/usr/bin/env python
 2 # coding:utf-8
 3 
 4 import requests
 5 from hashlib import md5
 6 
 7 
 8 class Chaojiying(object):
 9 
10     def __init__(self, username, password, soft_id):
11         self.username = username
12         self.password = md5(password.encode('utf-8')).hexdigest()
13         self.soft_id = soft_id
14         self.base_params = {
15             'user': self.username,
16             'pass2': self.password,
17             'softid': self.soft_id,
18         }
19         self.headers = {
20             'Connection': 'Keep-Alive',
21             'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',
22         }
23 
24     def post_pic(self, im, codetype):
25         """
26         im: 图片字节
27         codetype: 题目类型 参考 http://www.chaojiying.com/price.html
28         """
29         params = {
30             'codetype': codetype,
31         }
32         params.update(self.base_params)
33         files = {'userfile': ('ccc.jpg', im)}
34         r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files, headers=self.headers)
35         return r.json()
36 
37     def report_error(self, im_id):
38         """
39         im_id:报错题目的图片ID
40         """
41         params = {
42             'id': im_id,
43         }
44         params.update(self.base_params)
45         r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers)
46         return r.json()

test.py:

  1 import time
  2 from io import BytesIO
  3 from PIL import Image
  4 from selenium import webdriver
  5 from selenium.webdriver import ActionChains
  6 from selenium.webdriver.common.by import By
  7 from selenium.webdriver.support.ui import WebDriverWait
  8 from selenium.webdriver.support import expected_conditions as EC
  9 from Chaojiying import Chaojiying
 10 
 11 EMAIL = '1549687918@qq.com'
 12 PASSWORD = 'zhaoxueche110'
 13 
 14 CHAOJIYING_USERNAME = 'Azure00'
 15 CHAOJIYING_PASSWORD = 'zhaoxueche110'
 16 CHAOJIYING_SOFT_ID = '    897082'
 17 CHAOJIYING_KIND = '9102'
 18 
 19 class CrackTouClick():
 20     def __init__(self):
 21         self.url = 'http://admin.touclick.com/login.html'
 22         self.browser = webdriver.Chrome()
 23         self.wait = WebDriverWait(self.browser, 20)
 24         self.email = EMAIL
 25         self.password = PASSWORD
 26         self.chaojiying = Chaojiying(CHAOJIYING_USERNAME, CHAOJIYING_PASSWORD, CHAOJIYING_SOFT_ID)
 27 
 28     def __del__(self):
 29         self.browser.close()
 30 
 31     def open(self):
 32         """
 33         打开网页输入用户名密码
 34         :return: None
 35         """
 36         self.browser.get(self.url)
 37         email = self.wait.until(EC.presence_of_element_located((By.ID, 'email')))
 38         password = self.wait.until(EC.presence_of_element_located((By.ID, 'password')))
 39         email.send_keys(self.email)
 40         password.send_keys(self.password)
 41 
 42     def get_touchclick_button(self):
 43         """
 44         获取初始验证按钮
 45         :return:
 46         """
 47         button = self.wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'touclick-hod-wrap')))
 48         return button
 49 
 50     def get_touch_element(self):
 51         """
 52         获取验证图片对象
 53         :return: 图片对象
 54         """
 55         element = self.wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'touclick-pub-content')))
 56         return element
 57 
 58     def get_position(self):
 59         """
 60         获取验证码位置
 61         :return: 验证码位置元组
 62         """
 63         element = self.get_touch_element()
 64         time.sleep(2)
 65         location = element.location
 66         size = element.size
 67         top, bottom, left, right = location['y'], location['y'] + size['height'], location['x'], location['x'] + size['width']
 68         return (top, bottom, left, right)
 69 
 70     def get_screenshot(self):
 71         """
 72         获取网页截图
 73         :return: 截图对象
 74         """
 75         screenshot = self.browser.get_screenshot_as_png()
 76         screenshot = Image.open(BytesIO(screenshot))
 77         return screenshot
 78 
 79     def get_touch_click_image(self, name= 'captcha.png'):
 80         """
 81         获取验证码图片
 82         :param name:图片对象
 83         :return:
 84         """
 85         top, bottom, left, right = self.get_position()
 86         print('验证码位置', top, bottom, left, right)
 87         screenshot = self.get_screenshot()
 88         captcha = screenshot.crop((left, top, right, bottom))
 89         captcha.save(name)
 90         return captcha
 91 
 92     def get_points(self, captcha_result):
 93         """
 94         解析识别结果
 95         :param captcha_result:识别结果
 96         :return: 转化后的结果
 97         """
 98         groups = captcha_result.get('pic_str').split('|')
 99         locations = [[int(number) for number in group.split(',')] for group in groups]
100         return locations
101 
102     def touch_click_words(self, locations):
103         """
104         点击验证图片
105         :param locations:点击位置
106         :return: None
107         """
108         for location in locations:
109             print(location)
110             ActionChains(self.browser).move_to_element_with_offset(self.get_touclick_element(), location[0], location[1]). click().perform()
111             time.sleep(1)
112 
113     def touch_click_verify(self):
114         """
115         点击验证按钮
116         :return: None
117         """
118         button = self.wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'touclick-pub-submit')))
119         button.click()
120 
121     def login(self):
122         """
123         登陆
124         :return:None
125         """
126         submit = self.wait.until(EC.element_to_be_clickable((By.ID, '_submit')))
127         submit.click()
128         time.sleep(10)
129         print("登陆成功")
130 
131     def crack(self):
132         """
133         破解入口
134         :return:None
135         """
136         # 点击验证按钮
137         button = self.get_touchclick_button()
138         button.click()
139         # 获取验证码图片
140         image = self.get_touch_click_image()
141         bytes_array = BytesIO()
142         image.save(bytes_array, format='PNG')
143         # 识别验证码
144         result = self.chaojiying.post_pic(bytes_array.getvalue(), CHAOJIYING_KIND)
145         print(result)
146         locations = self.get_points(result)
147         self.touch_click_words(locations)
148         self.touch_click_verify()
149         # 判定是否成功
150         success = self.wait.until(EC.text_to_be_present_in_element((By.CLASS_NAME, "touchlick_hod_note"), '验证成功'))
151         print(success)
152 
153         # 失败后重试
154         if not success:
155             self.crack()
156         else:
157             self.login()
158 
159 if __name__ == '__main__':
160     crack = CrackTouClick()
161     crack.crack()

结果等PIL与python 3.7对应版本出来再发哦!

原文地址:https://www.cnblogs.com/Trojan00/p/9504115.html