Comment contourner un Captcha (simple) avec Python3 et Pytesseract?
Un CAPTCHA, acronyme qui signifie Completely Automated Public Turing test to tell Computers and Humans Apart, est un test utilisé par les sites internets partout dans le monde, pour déterminer si un utilisateur est véritablement un humain.
Prérequis
Afin de réaliser ce tutoriel de bout en bout, soyez sur d’avoir les éléments suivants installés sur votre ordinateur.
Vous pouvez cliquer sur les liens ci-dessous, qui vous dirigeront soit vers un tutoriel d’installation, soit vers le site en question.
Pour préciser l’utilité de chacun des éléments cités ci-dessus: python3 est le langage informatique avec lequel nous allons scraper le pdf, et SublimeText est un éditeur de texte. Sublime.
À nous de jouer!
Installation
On va procéder comme suit:
- Installer open-cv
- Installer pytesseract
- Installer tesseract
- Télécharger le Captcha
Pour les 2 premières librairies, Il suffit dans la console, de taper les commandes suivantes:
f$ pip3 install opencv-python $ pip3 install pytesseract
Enfin, il faut installer tesseract, qui est un OCR, l’acronyme de Optical Character Recognition, c'est-à-dire la technologie qui va permettre de déchiffrer les caractères du Captcha.
Mac OS
f$ brew install tesseract
Linux
Et l’ensemble des informations détaillés d’installation présentes ici: https://stackoverflow.com/questions/50655738/how-do-i-resolve-a-tesseractnotfounderrorfsudo apt update sudo apt install tesseract-ocr sudo apt install libtesseract-dev
Et voilà, les librairies sont installées!
Enfin, on va télécharger notre captcha (simple). Rendez-vous sur ce site de génération de captcha: https://fakecaptcha.com/. Taper le mot clé de votre choix. Enfin, télécharger l’image, à conserver précieusement:Allons désormais déchiffrer cette image. Et prouvez notre humanité. Sans aucune intervention humaine.
🤖
Guide Complet
Nous allons passer par 3 étapes distinctes:
- Resize
- Close
- Threshold
Avec les 3 transformations comme suit:
1. Resize
D’abord, nous allons redimensionner l’image. Le redimensionnement de l'image permet à l'algorithme OCR de détecter les traits de caractères ou de chiffres dans l'image d'entrée.
Le code comme suit:
ffilename = 'lobstr.jpeg' img = cv2.imread(filename) gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) (h, w) = gry.shape[:2] gry = cv2.resize(gry, (w*2, h*2))
2. Close
Le closing est une opération morphologique visant à supprimer les petits trous dans l'image d'entrée. Si nous regardons attentivement les caractères l et b se composent de beaucoup de petits trous.
Le code:
fcls = cv2.morphologyEx(gry, cv2.MORPH_CLOSE, None)
3. Threshold
Nous appliquerons un seuil simple pour binariser l'image. Notre objectif est de supprimer tous les artefacts restants de l'image, qui nuisent à la lisibilité.
Le code:
fthr = cv2.threshold(cls, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]
4. Decrypt
Enfin, une fois l’image suffisamment clarifiée, on décode le message avec la librairie tesseract pour Python.Et on imprime le message décodé dans la console:
ftxt = image_to_string(thr) print(txt)
Le Code
Voilà le code en intégralité:
fimport cv2 from pytesseract import image_to_string # pip3 install opencv-python # pip3 install pytesseract # brew install tesseract filename = 'lobstr.jpeg' img = cv2.imread(filename) gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) (h, w) = gry.shape[:2] gry = cv2.resize(gry, (w*2, h*2)) cls = cv2.morphologyEx(gry, cv2.MORPH_CLOSE, None) thr = cv2.threshold(cls, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1] txt = image_to_string(thr) print(txt)
Pour exécuter le code:
- Télécharger le code .py
- Changer le chemin de l’image
- Lancer le script via la ligne de commande
Et voilà ce qui va apparaître directement sur votre terminal:
f$ python3 bypass-captcha-pytesseract-tutorial.py lobstr
Eureka!
✨
Limitations
Ce code va vous permettre de convertir rapidement des images, générées depuis https://fakecaptcha.com/, en texte. Et donc de contourner les challenges possiblement posés lors d’un scraping de données.Toutefois, ce script ne fonctionne que pour des captchas simples . Essayons pour voir avec un Captcha Amazon, ci-après:On lance le script:
f$ python3 bypass-captcha-pytesseract-tutorial.py nrrth
Qui ne fonctionne tout simplement pas.
🤷♀️
Conclusion
Et c’est la fin du tutoriel!
Dans ce tutoriel, nous avons vu comment contourner un Captcha simple avec Python3 et Pytesseract, et ce de façon programmatique.
Si vous avez des questions, ou si vous avez besoin d’un service de scraping sur-mesure, solide et scalable, capable de contourner les captchas les plus robustes, contactez-nous ici.Happy scraping!
🦀
Co-founder @ lobstr.io depuis 2019. Fou de la data et amoureux zélé du lowercase. Je veille à ce que vous ayez toujours la donnée que vous voulez.