English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

python+Ejemplo de código para identificar y resolver el captcha con selenium e iniciar sesión

Debido a las necesidades del trabajo, se necesita usar el captcha para ingresar al sitio web. Al principio, estudié la identificación del captcha, pero siempre no podía obtener el captcha necesario. Hasta el viernes pasado, recordé esto, y ayer lo resolví con éxito.

Ahora viene lo importante:

Versión de python:3.4.3

Bibliotecas necesarias: PIL, selenium, tesseract

Primero el código:

#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)  #Abrir imagen
  image = image.point(lambda x: 0 if x<143 else 255) #Procesar cada píxel de la imagen, haciendo que cada punto de la imagen sea "ojo o blanco"
  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")  #Capturar pantalla y guardar imagen
  #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")
  #Limpiar cualquier carácter de espacio en blanco
  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)
    if authCode:
      driver.back()
      driver.find_element_by_xpath("//input[@id='orgCode' and @name='orgCode']
      driver.find_element_by_xpath("//input[@id='orgCode' and @name='orgCode']
      driver.find_element_by_xpath("//input[@id='account' and @name='username']
      driver.find_element_by_xpath("//input[@id='account' and @name='username']
      driver.find_element_by_xpath("//input[@type='password' and @name='password']
      driver.find_element_by_xpath("//input[@type='password' and @name='password']       
      driver.find_element_by_xpath("//input[@type='text' and @name='authCode']
      driver.find_element_by_xpath("//button[@type='submit']
      try:
        time.sleep(3")
        driver.find_element_by_xpath("//*[@id='side-menu']/li[2]/ul/li/a).click()
        return driver
      except:
        print("authCode Error:", authCode)
        driver.refresh()
  return driver
driver = withoutCookieLogin("http://localhost/})
driver.get("http://localhost/enterprise/add/})

¿Cómo obtener el captcha que necesitamos

En el camino de obtener el captcha, he caído en muchos pozos, he leído muchos artículos, muchos de los cuales te enseñan métodos de reconocimiento de captcha, pero no explican cómo obtener la imagen de captcha necesaria en el momento actual.

Mi método de procesamiento es:

1. Primero, abra la página de inicio de sesión necesaria con selenium1

2. Obtener la dirección url del captcha a través de la obtención de elementos de revisión2En realidad, lo más simple es abrir una nueva página con el botón derecho del ratón)

3: En la url1página, ingrese la dirección url2Ingresar a la url2página, luego capture y guarde la página de captcha

4: Obtener la cadena de captcha después de procesar el captcha. Luego, haga clic en el botón Atrás del navegador para regresar a la url1Página de inicio de sesión

5: Ingrese la información necesaria para iniciar sesión y el captcha

6: Hacer clic en iniciar sesión

7: Verificar la página de inicio de sesión después del inicio de sesión, determinar si el inicio de sesión fue exitoso, si no fue exitoso,则需要重新1-7operación.

Para proteger la información de la empresa, esta página es un servicio que he configurado localmente. He probado este método de obtención de captcha en la página de registro de Bilibili en línea. Es posible hacerlo. (Este método de procesamiento de captcha solo se aplica a captcha de fondo de píxeles, si el captcha tiene líneas, se requiere un procesamiento adicional.)

Esto es todo el contenido del artículo, espero que sea útil para su aprendizaje y que todos apoyen el tutorial de clamor.

Declaración: El contenido de este artículo se obtiene de la red, es propiedad del autor original, el contenido se contribuye y sube por los usuarios de Internet, este sitio no posee los derechos de propiedad, no se ha procesado editorialmente y no asume responsabilidades legales relacionadas.3codebox.com (al enviar un correo electrónico, reemplaza # con @ para denunciar y proporciona evidencia relevante. Una vez confirmado, este sitio eliminará inmediatamente el contenido sospechoso de infracción de derechos de autor.)

Te gustará