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

python+selenium이 인증 코드를 인식하고 로그인하는 예제 코드

업무가 필요하여 웹사이트에 로그인할 때 인증 코드가 필요합니다. 원래 인증 코드 인식에 대해 연구했지만 항상 필요한 인증 코드를 얻을 수 없었습니다. 그런 다음 금요일에 이 사실을 기억하고, 어제 문제를 해결했습니다.

본론에 들어갑니다:

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")
  #화면 공백 문자를 정리합니다
  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']".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()
      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/)

어떻게 우리가 필요한��확인码를 가져오는지

이验证码 획득의 길에서 많은 땅을 떨어졌고, 많은 기사를 보았으며, 많은 경우��확인码 인식 방법을 가르치지만, 어떻게 현재 필요한��확인码 이미지를 가져오는지 설명하지 않습니다.

제 처리 방법은 다음과 같습니다:

1.먼저 selenium을 통해 필요한 로그인 페이지 주소 url을 엽니다1

2.검토 요소를 통해��확인码의 주소 url을 얻습니다2(정말 간단한 방법은 오른쪽 클릭하여 새 창을 엽니다)

3:url에서1페이지에 주소 url을 입력합니다2url에 접속합니다2페이지에 접속하고��확인码 페이지를 스크린샷으로 저장합니다

4:url에서��확인码를 처리하고��확인码 문자열을 얻습니다. 그런 다음 브라우저의 되돌리기 버튼을 클릭하여 url로 돌아갑니다1로그인 페이지

5:로그인에 필요한 정보와��확인码 입력

6:로그인 클릭

7:로그인 후 페이지를 확인하고 성공 여부를�断하여, 성공하지 않으면 다시1-7의 작업.

회사의 정보를 보호하기 위해, 이 페이지는 저의 로컬 서비스입니다. 베로렐 라인 등록 페이지에서 이验证码 획득 방법을 테스트했으며, 가능합니다.(이验证码 처리 방법은 배경이 픽셀 포인트인 경우에만 적용되며, 라인이 있는 경우 추가적으로 처리가 필요합니다。)

이것이 본문의 전부입니다. 많은 도움이 되길 바라며, 간절히 다른 강의에 대한 지원을 바랍니다.

성명: 본문은 인터넷에서 가져왔으며, 저작권자는 본인입니다. 인터넷 사용자가 자발적으로 기여하고 자체로 업로드한 내용이며, 이 웹사이트는 소유권을 가지지 않으며, 인공적으로 편집한 것이 아니며, 관련 법적 책임도 부담하지 않습니다. 저작권 위반 내용이 발견되면 notice#w로 이메일을 보내 주시기 바랍니다.3codebox.com(보고할 때는 #을 @으로 바꿔주세요.)을 통해 신고하시고 관련 증거를 제공하시면, 확인되면 즉시 저작권 위반 내용을 삭제하겠습니다.

추천해드립니다