python(自动化)利用selenium+百度ocr文字识别验证码实现自动登陆登陆CET-四级报名系统

操作步骤:

1:登陆打开CET-考试系统

2:填写相关登陆信息

3:调用百度ocr实现文字验证码识别

4:实现登陆


如何使用和调用百度ocr文字识别接口

1:进入百度AI开发平台:链接

2:在页面上选择进入控制台:
百度AI
3:登陆百度账号(没有百度账号的需要先注册)
在这里插入图片描述
4:进来后点击文字识别在这里插入图片描述
5:进来后再点击创建应用(这里我已创建好)
在这里插入图片描述
6:获取我门需要的三个信息,后面代码需要用到
即AppID,APIkey,SecretKey
在这里插入图片描述


代码需要用到的python库

1: selenium

2: time(时间模块,用于适当的时间加载限制)

3:PIL(图像处理模块,也可用Open-cv模块代替实现相关需求)
4: baidu-aip模块

少数人可能在from aip import AipOcr 这段代码就报错了,原因是你没有安装百度的接口,不过没关系,你只需要用cmd进入你安装Python的路径下执行 pip install baidu-aip 即可!


下面进入代码环节(有注释):

#利用百度ocr识别自动登陆四级考试网并进入报名页面
from  selenium import  webdriver
from time import sleep
from  PIL import  Image
from aip import  AipOcr
from selenium.webdriver.support.select import Select
from selenium.common.exceptions import UnexpectedAlertPresentException

#驱动的加载和访问页面
driver = webdriver.Chrome()
driver.maximize_window()
#设置页面加载时间
driver.set_page_load_timeout(20)
driver.set_script_timeout(20)
#CET-考试系统网址
url = 'http://cet-bm.neea.edu.cn/'
driver.get(url)

#点击进入报名页面
driver.find_element_by_xpath('//*[@id="main_l"]/a[1]/p[1]').click()
#填写相关信息
username = '######' #这里填写你的登陆用户名,如手机号
password = '#####'  #这里输入你的登陆密码
driver.find_element_by_xpath('//*[@id="txtUserName"]').send_keys(username)
driver.find_element_by_xpath('//*[@id="txtPassword"]').send_keys(password)
driver.implicitly_wait(3) #隐式等待

"""截屏并调用百度ocr文字识别输入验证码"""
while True:
    driver.find_element_by_xpath('//*[@id="txtCheckImageValue"]').clear() #每次执行前清空输入栏
    screenImg = r'D:\python\1.png'  #截图图片的存储路径,我这里放入我的相关目录,你也可以更改r'###'的内容
    #截图整个窗口的图,据此后面再根据坐标信息截图特定验证码位置的图
    driver.get_screenshot_as_file(screenImg)
    #获取验证码图片的位置坐标信息
    location = driver.find_element_by_xpath('//*[@id="imgCheckImage"]').location
    #获取验证码图片的尺寸大小
    size = driver.find_element_by_xpath('//*[@id="imgCheckImage"]').size
    #获取截图所需的位置信息
    left = int(location['x'])
    top = int(location['y'])
    right = int(location['x']+size['width'])
    bottom = int(location['y']+size['height'])
    #由上面的坐标信息截图特定区域,得到验证码截图
    img = Image.open(screenImg).crop((left,top,right,bottom))
    img.save(screenImg)
    #定义百度ocr相关变量,将你的前面百度复制三个信息填入其中
    AppID = '#########'
    APIKey = '##########'
    SecretKey = '#########'
    #初始化操作
    client = AipOcr(AppID,APIKey,SecretKey)
    i = open(screenImg,'rb') #以rb方式打开目标路径图片即验证码截图
    img = i.read()  #读取截图
    message = client.basicGeneral(img)
    print(message)
    for i in message.get('words_result'):
        print(i,i.get('words'))
    if message.get('words_result') != []:
        driver.find_element_by_xpath('//*[@id="txtCheckImageValue"]').send_keys(i.get('words'))
    else:
        driver.find_element_by_xpath('//*[@id="txtCheckImageValue"]').send_keys('识别不出来')
    #判断登陆情况据此执行不同操作
    try:
        #点击登陆按钮
        driver.find_element_by_xpath('//*[@id="ibtnLogin"]').click()
        if u'欢迎使用CET考试报名系统' not in driver.title:
            print("窗口弹出,验证码错误")
            #由于登陆失败会弹出对话框,下面是处理弹出的对话框
            alert = driver.switch_to.alert
            sleep(2)
            alert.accept()
        else:
            print("登陆成功!!")
            break
    except UnexpectedAlertPresentException:
        print("重新登陆......")
    driver.implicitly_wait(3)
    #注意重新登陆尝试需要对几个输入框都清空
    username = "#######"  #这里输入你的用户名
    password = "######"   #这里输入你的密码
    driver.find_element_by_xpath('//*[@id="txtUserName"]').clear()
    driver.find_element_by_xpath('//*[@id="txtUserName"]').send_keys(username)
    driver.find_element_by_xpath('//*[@id="txtPassword"]').clear()
    driver.find_element_by_xpath('//*[@id="txtPassword"]').send_keys('password')

print("恭喜,您已成功通过识别验证码")

The End!!创作不易,欢迎点赞/评论!!欢迎关注个人公众号

在这里插入图片描述

  • 8
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 使用 Python + Selenium 自动识别文字点选式验证码的方法如下: 1. 安装 Selenium 库和对应的浏览器驱动; 2. 使用 Selenium 打开网页并获取验证码图片; 3. 使用 OCR 技术识别图片中的文字; 4. 使用 Selenium 点击图片中对应文字的位置。 代码示例: ``` from selenium import webdriver from selenium.webdriver.common.by import By # 启动浏览器 driver = webdriver.Chrome() # 打开页面 driver.get("https://www.example.com/verify") # 获取验证码图片并识别文字 code = recognize_verify_code(driver.find_element(By.CSS_SELECTOR, "#verify-code").screenshot_as_png) # 点击图片中对应文字的位置 driver.find_element(By.CSS_SELECTOR, f"#verify-code .verify-item[title='{code}']").click() ``` 其中 `recognize_verify_code` 函数需要自行实现,可以使用第三方 OCR 库,如 Tesseract。 ### 回答2: 要使用PythonSelenium自动识别文字点选式验证码,可以按照以下步骤进行: 1. 安装必要的软件和库: - 安装Python:从Python官方网站下载并安装Python。 - 安装Selenium:使用pip命令安装Selenium库,可以使用以下命令:`pip install selenium`。 - 安装webdriver:下载并安装适合您浏览器版本的webdriver,可以使用chromedriver或geckodriver。 2. 导入所需的库和模块: ```python from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC ``` 3. 启动浏览器驱动程序: ```python driver = webdriver.Chrome() # 如果使用Chrome浏览器 ``` 4. 打开目标网页: ```python driver.get("目标网页的URL") ``` 5. 定位验证码元素和识别区域: ```python captcha_element = driver.find_element(By.XPATH, "验证码元素的XPath") captcha_area = driver.find_element(By.XPATH, "识别区域的XPath") ``` 6. 截取验证码图片: ```python captcha_image = captcha_area.screenshot_as_png ``` 7. 使用第三方验证码识别库处理验证码图片: ```python # 这里假设使用了Tesseract OCR库来识别验证码 from PIL import Image import pytesseract captcha_text = pytesseract.image_to_string(Image.open(captcha_image)) ``` 8. 识别出的验证码文本作为答案,执行点击动作: ```python actions = ActionChains(driver) actions.move_to_element(captcha_element).click().send_keys(captcha_text).perform() ``` 9. 提交验证码: ```python submit_button = driver.find_element(By.XPATH, "提交按钮的XPath") submit_button.click() ``` 10. 等待页面加载完成,进行后续操作。 以上是一个基本的框架。具体步骤会根据网页的具体设计和验证码类型而有所不同。自动识别文字点选式验证码是一项复杂的任务,需要不断调试和优化识别算法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值