English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Из-за необходимости работы, для входа на сайт требуется ввод капчи. Вначале я занимался исследованием распознавания капч, но не мог получить ту капчу, которую мне нужно было. Только на этой неделе я вспомнил об этом, и вчера успешно решил проблему.
Теперь к делу:
Версия python: 3.4.3
Необходимые библиотеки: PIL, selenium, tesseract
Рассмотрим код:
#coding:utf-8 import subprocess from PIL import Image from PIL import 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) while True: authCode = getAuthCode(driver, url) если 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() пробовать: time.sleep(3) driver.find_element_by_xpath("//*[@id='side-menu']/li[2]/ul/li/a").click() return driver за исключением: печать("ошибка кода аутентификации:", authCode) driver.refresh() return driver driver = withoutCookieLogin("http://localhost/") driver.get("http://localhost/enterprise/add/")
Как получить необходимые нам капчи
На этом пути получения капчи я упал в слишком много ям, читал слишком много статей, многие из которых учат вас методам распознавания капчи, но не объясняют, как получить текущую необходимую вам картинку капчи.
Мой способ обработки:
1. Сначала с помощью selenium откройте адрес страницы входа, который вам нужно открыть, url1
2. Получите адрес капчи url2 через элемент проверки (на самом деле самым простым способом является открытие нового окна с правой кнопкой мыши)
3: Введите адрес url1 на странице url1, перейдите на страницу url2, затем сделайте скриншот и сохраните страницу капчи
4: Обработайте капчу и получите строку капчи. Затем нажмите кнопку "назад" в браузере, чтобы вернуться на страницу входа url1
5: Введите информацию, необходимую для входа, и капчу
6: Нажмите на вход
7: Проверьте страницу после входа в систему,判断是否成功, если не успешен,则需要重新执行1-7的操作。
Для защиты информации компании, эта страница - это моя местная служба, я тестировал этот способ получения капчи на странице регистрации Bole Online, и это можно сделать. (Этот способ обработки капчи действует только для капчи с фоном в виде пикселей, если капча содержит горизонтальные линии, потребуется дополнительная обработка.)
Вот весь контент статьи, надеюсь, он поможет вам в изучении, и希望大家多多支持呐喊教程。
Заявление: содержимое этой статьи взято из Интернета, авторское право принадлежит соответствующему автору, контент предоставлен пользователями Интернета в добровольном порядке, сайт не обладает правами собственности, не underwent редактирование в人工, и не несет ответственности за соответствующие юридические последствия. Если вы обнаружите содержимое,涉嫌侵犯版权, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (при отправке письма, пожалуйста, замените # на @) для сообщения о нарушении, и предоставьте соответствующие доказательства. При обнаружении факта нарушения, сайт немедленно удаляет涉嫌侵权的内容.