English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
A causa del lavoro, è necessario utilizzare il captcha per accedere al sito web. All'inizio ho studiato il riconoscimento del captcha, ma non sono mai riuscito a ottenere il captcha di cui avevo bisogno. Finché venerdì scorso, mi sono ricordato di questa cosa, e ieri l'ho risolta con successo.
Passiamo all'essenza:
versione di python: 3.4.3
Le librerie necessarie: PIL, selenium, tesseract
Ecco il codice:
#codice: utf-8 importa subprocess importa PIL come Image importa PIL come ImageOps from selenium import webdriver import time,os,sys def cleanImage(imagePath): image = Image.open(imagePath) #打开图片 image = image.point(lambda x: 0 if x<143 else 255) #处理图片上的每个像素点,使图片上每个点“非黑即白” borderImage = ImageOps.expand(image,border=20,fill='white') borderImage.save(imagePath) def getAuthCode(driver, url="http://localhost/"): captchaUrl = url + "common/random" driver.get(captchaUrl) time.sleep(0.5) driver.save_screenshot("captcha.jpg") #截图,并保存图片 #urlretrieve(captchaUrl, "captcha.jpg") time.sleep(0.5) cleanImage("captcha.jpg") p = subprocess.Popen(["tesseract", "captcha.jpg", "captcha"], stdout=\ subprocess.PIPE,stderr=subprocess.PIPE) p.wait() f = open("captcha.txt", "r") #Clean any whitespace characters captchaResponse = f.read().replace(" ", "").replace("\n", "") print("Captcha solution attempt: " + captchaResponse) if len(captchaResponse) == 4: return captchaResponse else: return False def withoutCookieLogin(url="http://org.cfu666.com/"): driver = webdriver.Chrome() driver.maximize_window() driver.get(url) mentre vero: authCode = getAuthCode(driver, url) se authCode: driver.back() driver.find_element_by_xpath("//input[@id='orgCode' and @name='orgCode']").clear() driver.find_element_by_xpath("//input[@id='orgCode' and @name='orgCode']").send_keys("orgCode") driver.find_element_by_xpath("//input[@id='account' and @name='username']").clear() driver.find_element_by_xpath("//input[@id='account' and @name='username']").send_keys("username") driver.find_element_by_xpath("//input[@type='password' and @name='password']").clear() driver.find_element_by_xpath("//input[@type='password' and @name='password']").send_keys("password") driver.find_element_by_xpath("//input[@type='text' and @name='authCode']").send_keys(authCode) driver.find_element_by_xpath("//button[@type='submit']").click() prova: time.sleep(3) driver.find_element_by_xpath("//*[@id='side-menu']/li[2]/ul/li/a").click() return driver eccetto: stampa("authCode Error:", authCode) driver.refresh() return driver driver = withoutCookieLogin("http://localhost/") driver.get("http://localhost/enterprise/add/")
Come ottenere il captcha di cui abbiamo bisogno
Sulla strada per ottenere il captcha, ho caduto in troppi buchi, letto troppi articoli, molti di loro ti insegnano come riconoscere il captcha, ma non spiegano come ottenere l'immagine del captcha attuale di cui hai bisogno.
Il mio metodo di elaborazione è:
1: Usa selenium per aprire l'indirizzo della pagina di login che desideri url1
2: Ottieni l'indirizzo del captcha tramite l'elemento di revisione (in realtà, il metodo più semplice è aprire una nuova pagina con il tasto destro del mouse)
3: Nella pagina url1, inserisci l'indirizzo url2 per entrare nella pagina url2, quindi fai uno screenshot e salva la pagina del captcha
4: Elabora il captcha per ottenere la stringa del captcha. Poi clicca sul pulsante 'Indietro' del browser, tornare alla pagina di login url1
5: Inserisci le informazioni necessarie per il login e il captcha
6: Clicca su login
7: Verifica la pagina dopo il login, determina se è stato successo, se non è successo,则需要重新执行1-7的操作。
Per proteggere le informazioni della società, questa pagina è un servizio che ho configurato localmente, ho testato il metodo di acquisizione di questo captcha sulla pagina di registrazione di Baile Online, è possibile passare. (Il metodo di elaborazione del captcha è valido solo se lo sfondo del captcha è fatto di pixel, se il captcha ha linee è necessario trattare in modo extra.)
Questo è tutto il contenuto dell'articolo, spero che sia utile per la tua apprendimento, e spero che tu sostenga fortemente il tutorial URL.
Dichiarazione: il contenuto di questo articolo è stato prelevato da Internet, il copyright è dell'autore originale, il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, questo sito non detiene il diritto di proprietà, non è stato editato manualmente e non assume responsabilità legali correlate. Se trovi contenuti sospetti di violazione del copyright, invia un'e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare e fornire prove pertinenti. Una volta verificata, il sito eliminerà immediatamente il contenuto sospetto di violazione del copyright.