在验证码的图片上点击右键就可以看到一个可以生成验证码的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