• 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对应版本出来再发哦!

  • 相关阅读:
    图像功率结合
    三星(多星)模型
    双星模型
    卫星变轨问题
    桌面木块弹簧
    球——绳模型、球——杆模型
    汽车拐弯问题
    圆锥摆模型
    省队集训日记
    NOI前比赛经验总结
  • 原文地址:https://www.cnblogs.com/Trojan00/p/9504115.html
Copyright © 2020-2023  润新知