获取整个页面的截图
获取验证码的坐标位置
根据验证码的坐标位置 在整个页面的图片中进行切图
把切下来的验证码发给 上传超级鹰取返回的坐标位置
element 标签对象 #!/usr/bin/env python# coding:utf-8import timefrom io import BytesIOfrom PIL import Imagefrom selenium import webdriverfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.common.by import Byfrom selenium.webdriver import ActionChainsfrom chaojiying import Chaojiying_ClientCHAOJIYING_USERNAME = 'python123'CHAOJIYING_PASSWORD = '123456'CHAOJIYING_SOFT_ID = 899060CHAOJIYING_KIND = 9004class Crack_Click(object): def __init__(self): self.driver = webdriver.Chrome() self.driver.maximize_window() self.wait = WebDriverWait(self.driver, 5) self.chaojiying = Chaojiying_Client(CHAOJIYING_USERNAME,CHAOJIYING_PASSWORD,CHAOJIYING_SOFT_ID) def get_screenshot(self): """ 获取网页截图 :return: """ screenshot = self.driver.get_screenshot_as_png() screenshot = Image.open(BytesIO(screenshot)) return screenshot def get_image_element(self): """ 获取验证码图片 :return: """ element = self.wait.until(EC.presence_of_element_located((By.XPATH, '//div[@class="pw_main"]'))) return element def get_positon(self): """ 获取验证码的坐标位置 :return: """ element = self.get_image_element() location = element.location #指的是这个标签在页面中的坐标 size = element.size top,bottom,left,right = location['y'],location['y']+size['height'],location['x'],location['x']+size['width'] print(top,bottom,left,right) return(top,bottom,left,right) def get_crop_image(self): """ 对指定坐标进行切图 :return: """ self.driver.save_screenshot('aa.png') top, bottom, left, right = self.get_positon() im = Image.open('aa.png') captcha = im.crop((left.top,right,bottom)) captcha.save('captcha.png') return captcha def get_points(self,result): """ 对返回的坐标进行解析 :param result: :return: """ groups = result.get('pic_str').split('|') locations = [[int(i) for i in group.split('|')] for group in groups] return locations def click_words(self,locations): """ 根据坐标进行点击 :param locations: :return: """ for location in locations: ActionChains(self.driver).move_to_element_with_offset(self.get_image_element(),location[0],location[1]).click().perform() time.sleep(1) def crack(self): self.driver.get('https://aq.yy.com/p/reg/account.do?appid=&url=&fromadv=udbclsd_r') #获取验证码 captcha_image = self.get_crop_image() bytes_image = BytesIO() captcha_image.save(bytes_image, format('PNG')) #识别验证码 result = self.chaojiying.PostPic(bytes_image.getbuffer(),CHAOJIYING_KIND) locations = self.get_positon(result) self.click_words(locations) def __del__(self): self.driver.close() if __name__ == '__main__': crack = Crack_Click() crack.crack()
转载于:https://www.cnblogs.com/wdty/p/10665126.html
相关资源:高仿“点触验证码”做的一个静态Html例子