selenium:川农学工网自动化登录

实现步骤

我萌使用检查工具查看相应的代码

同理我们知道了相应的html代码

验证码使用截屏方式截图后二值化处理后,进行OCR识别,如果错误,重复识别

,如果密码错误,则退出

import tesserocr
import os
import time
import re
import tesserocr
from selenium import webdriver
from io import BytesIO
from PIL import Image
from retrying import retry
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
from selenium.webdriver.support.wait import WebDriverWait
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException,NoSuchElementException



def preprocess(image):
    array =image
    array = np.where(image > 100, 255, 0)
    image = Image.fromarray(array.astype('uint8'))
    return image

def login(browser):
    username = "202105930"
    psw = "2003517517Jkl."
    browser.get("http://xsc.sicau.edu.cn/Sys/UserLogin.aspx")
    input = browser.find_element(By.ID, value='UserName')
    input.send_keys(username)
    input = browser.find_element(By.NAME, value='UserPass')
    input.send_keys(psw)
    browser.set_window_size(1000, 800)
    browser.save_screenshot('1.png')
    image = Image.open('1.png')
    image = image.convert('RGB')
    image = np.array(image)
    image = image[480:503, 1030:1103, :]
    image = preprocess(image)
    image = image.convert('L')
    # plt.imshow(image)
    # plt.show()
    code = tesserocr.image_to_text(image)
    code = code.strip()
    print("验证码识别结果", code)
    if code.isdigit():
        input = browser.find_element(By.ID, value='CheckCode')
        code = str(code)
        input.send_keys(code)
        input = browser.find_element(By.ID, value='CheckCode')
        input.send_keys(code)
        input = browser.find_element(By.ID, value='Btn_OK')
        input.click()
        wait=WebDriverWait(browser,1)
        try:
            input=wait.until(EC.alert_is_present())
            dig_alert = browser.switch_to.alert
            if(dig_alert.text=="用户名或密码错误!"):
                print("用户名或密码错误")
                return -1
            dig_alert.accept()
            print("验证码失败了")
            return 0
        except:
            return 1
    else:
        print("识别有错")
        return 0


if __name__ == "__main__":
    browser = webdriver.Edge()
    browser.start_client()
    for i in range(5):
       p=login(browser)
       if p==1:
           print("登录成功")
           break
       elif p==-1:
           break


猜你喜欢

转载自blog.csdn.net/qq_36831734/article/details/127183673