4.验证码手动处理

本文介绍了一个使用Python实现的手动输入验证码进行选课的脚本,通过下载验证码图片并显示,用户手动输入验证码完成选课过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在验证码的图片上点击右键就可以看到一个可以生成验证码的url。我们在之前已经把它放在了初始化函数里。

#验证码页
yanzhengmaurl = 'https://gsdb.bjtu.edu.cn/get_check_code_image/'

在这一步我想先把验证码下载下来,然后可以再本地看到验证码的图片,先手动输入验证码看看可不可以实现选课的操作。

#获取验证码,并将验证码图片保存在当前文件夹
codeimg = opener.open(yanzhengmaurl).read()
# result = opener.open(yanzhengmaurl)
with open('code.png','wb') as fn:
    fn.write(codeimg)
img = Image.open('code.png')
img.show()


我们看运行以后图片被显示了出来


接下来改一下提交数据的post的data值:

这里我们设置一个手动输入验证码的步骤:

code = raw_input('>>>')

submit_data = {
        'checkbox':'19559',
        'checkcode':code
}

运行一下,现在其实已经实现了选课的功能。但是每次都要手动输入验证码,实在是太麻烦,所以接下来将想办法让机器来输入验证码。


更改后的源码:

#-*-coding:utf-8 -*-
import urllib2
import urllib
import cookielib
from bs4 import BeautifulSoup
from PIL import Image

#登陆页
url_login = 'https://gsdb.bjtu.edu.cn/client/login/'
#选课页
course_url = 'https://gsdb.bjtu.edu.cn/course_selection/select/'
#验证码页
yanzhengmaurl = 'https://gsdb.bjtu.edu.cn/get_check_code_image/'
#提交选课信息的url
submit_url = 'https://gsdb.bjtu.edu.cn/course_selection/select/select/'


login_info = {
    'u':'16126193',
    'p':'153019'
    }



# 初始化一个CookieJar来处理Cookie
cookieJar=cookielib.CookieJar()
# 实例化一个全局opener
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar))
post_data=urllib.urlencode(login_info)
req = urllib2.Request(url_login,post_data)
result = opener.open(req)
# 访问课程主页 这个时候每一次访问都自动带着cookie信息了
result = opener.open(course_url).read()
# 显示一下结果
#print result

#获取验证码,并将验证码图片保存在当前文件夹
codeimg = opener.open(yanzhengmaurl).read()
# result = opener.open(yanzhengmaurl)
with open('code.png','wb') as fn:
    fn.write(codeimg)
img = Image.open('code.png')
img.show()


code = raw_input('>>>')
submit_data = {
        'checkbox':'19559',
        'checkcode':code
}



submit_data=urllib.urlencode(submit_data)
req2 = urllib2.Request(submit_url,submit_data)
html = opener.open(req2).read()
#print html


# 抓一下返回结果
array = []
soup = BeautifulSoup(html)
a = soup.find_all("div", class_=['alert', 'alert-block', 'alert-error', 'fade in'])
for i in a:
    array.append(i)
str1 = str(array[0])
str2 = str1.splitlines()
str3 = str2[3].strip()

print str3


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值