ADD file via upload

master
p24xap6sq 3 years ago
parent ad53b5fc8d
commit 0232b9a93c

@ -0,0 +1,142 @@
import time
from io import BytesIO
from PIL import Image
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from chaojiying import Chaojiying_Client
#账号密码自行设定
EMAIL = '18934861725' #b站账号
PASSWORD = '1258490786' #b站密码
# CHAOJIYING_USERNAME = '123456rom'
# CHAOJIYING_PASSWORD = '1234567'
CHAOJIYING_USERNAME = '123456yiyiyi' #超级鹰账号
CHAOJIYING_PASSWORD = '123456789' #超级鹰密码
# CHAOJIYING_SOFT_ID = 932562
CHAOJIYING_SOFT_ID = 932746 #用户中心>>软件ID 生成一个替换 96001
CHAOJIYING_KIND = 9004 #验证码类型
class Crackclick():
def __init__(self):
self.url = 'https://passport.bilibili.com/login'
self.browser = webdriver.Chrome() #谷歌浏览器
self.wait = WebDriverWait(self.browser, 20)
self.email = EMAIL
self.password = PASSWORD
self.chaojiying = Chaojiying_Client(CHAOJIYING_USERNAME, CHAOJIYING_PASSWORD, CHAOJIYING_SOFT_ID)
def open(self):
'''
打开网页,切换验证模式
'''
self.browser.get(self.url)
account = self.wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'type-tab')))
account.click()
email = self.wait.until(EC.presence_of_element_located((By.ID, 'login-username')))
password = self.wait.until(EC.presence_of_element_located((By.ID, 'login-passwd')))
email.send_keys(self.email)
password.send_keys(self.password)
def refresh_code(self):
'''
刷新验证码
'''
button = self.wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'geetest_refresh')))
return button
#获取验证码图片
def get_element(self):
'''获取验证图片对象'''
element = self.wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'geetest_item_img')))
return element
def get_position(self):
'''获取验证码位置'''
element = self.get_element()
time.sleep(2)
elementt = self.wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'geetest_item_img')))
location = elementt.location
size = elementt.size
top, bottom, left, right = location['y'], location['y']+size['height'], location['x'], location['x']+size['width']
return (top,bottom,left,right)
def get_screenshot(self):
'''获取网页截图'''
screenshot = self.browser.get_screenshot_as_png()#获取页面截图
screenshot = Image.open(BytesIO(screenshot))
return screenshot
def get_image(self,name='captcha.png'):
'''获取验证码图片'''
top, bottom, left, right = self.get_position()
print('验证码位置',top,bottom,left,right)
screenshot = self.get_screenshot()
captcha = screenshot.crop((left,top,right,bottom))
return captcha
#解析识别信息
def get_points(self, captcha_result):
'''
解析识别信息
'''
groups = captcha_result.get('pic_str').split('|')
locations = [[int(number) for number in group.split(',')] for group in groups]
return locations
#点击验证图片
def touch_click_words(self,locations):
'''
点击验证码
'''
for location in locations:
print(location)
ActionChains(self.browser).move_to_element_with_offset(self.get_element(),location[0],location[1]).click().perform()
time.sleep(1)
#点击登录
def login(self):
'''
点击登录按钮
'''
button = self.wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'btn.btn-login')))
button.click()
time.sleep(5)
#点击确认
def confirm(self):
'''
点击确认按钮
'''
button = self.wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'geetest_commit_tip')))
button.click()
#控制流程
def crack(self):
'''入口'''
self.open()
self.login()
# button = self.refresh_code()
# button.click()
image = self.get_image()
bytes_array = BytesIO()
image.save(bytes_array, format='PNG')
# 识别验证码
result = self.chaojiying.PostPic(bytes_array.getvalue(), CHAOJIYING_KIND)
print(result)
locations = self.get_points(result)
self.touch_click_words(locations)
self.confirm()
if __name__ == "__main__":
crack = Crackclick()
crack.crack()
Loading…
Cancel
Save