Python 自動化之驗證碼識別


之前公司的驗證碼比較簡單,可以采取直接破解的方式進行登錄

部分代碼如下:

# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Selectimport unittest,time,re,sys
from PIL import Image
import pytesseract


reload(sys)
sys.setdefaultencoding('utf-8')

class Ypt(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.implicitly_wait(30)
        self.base_url = "http://*********.com"
        self.verificationErrors = []
        self.accept_next_alert = True

    def get_streen(self):
        driver = self.driver
        driver.save_screenshot('D://aa.png')  #截取當前網頁,該網頁有我們需要的驗證碼
        imgelement = driver.find_element_by_xpath('//*[@id="id_checkCode"]')  #定位驗證碼
        location = imgelement.location  #獲取驗證碼x,y軸坐標
        size=imgelement.size  #獲取驗證碼的長寬
        rangle=(int(location['x']),int(location['y']),int(location['x']+size['width']),int(location['y']+size['height'])) #寫成我們需要截取的位置坐標
        i=Image.open("D://aa.png") #打開截圖
        frame4=i.crop(rangle)  #使用Image的crop函數,從截圖中再次截取我們需要的區域
        frame4.save('D://frame4.png')
        img = Image.open('D://frame4.png')
        print img.load()
        aa =  .image_to_string(img)
        print u"識別的驗證碼為:"
        print aa
        if aa == "":               #如果識別為空,則再一次識別
            driver.find_element_by_xpath('//*[@id="id_checkCode"]').click()
            self.get_streen()
        return aa

    def test_ypt(self):
        now_time = open("yuheng.txt","a")
        driver = self.driver
        driver.maximize_window()
        driver.get(self.base_url + "/userLoginOut.screen")
        driver.find_element_by_id("j_username").clear()
        driver.find_element_by_id("j_username").send_keys("username")
        driver.find_element_by_id("j_password").clear()
        driver.find_element_by_id("j_password").send_keys("password")
        driver.find_element_by_id("id_imgCode").clear()
        driver.find_element_by_id("id_imgCode").send_keys(self.get_streen())
        driver.find_element_by_id("btn-login").click()
        driver.find_element_by_id("C5A000005").click()
        driver.find_element_by_link_text(u"概況數據").click()
        self.assertEqual(u"**************", driver.title)
        time.sleep(8)def is_element_present(self, how, what):
        try: self.driver.find_element(by=how, value=what)
        except NoSuchElementException, e: return False
        return True
    
    def is_alert_present(self):
        try: self.driver.switch_to_alert()
        except NoAlertPresentException, e: return False
        return Trueif __name__ == "__main__":
    unittest.main()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM