【转载http://www.cnblogs.com/greenteemo/p/6629126.html】
文章大部分内容转载于上面所标注的博客,其中代码部分没有经过我的试验,但是大概流程应该是对的。
登陆窗口
表单数据
观察登陆窗口和提交的表单数据,可知只要将账号、密码、验证码正确赋值提交即可模拟登陆。
账号和密码都有,问题的关键就在验证码上。
验证码图片审查观察源码如下图:
重点!!!
【误区】纠结random那段随机数,以为是确定的随机数对应确定的验证码
【正解】一般验证码只是判断cookie后面的随机值是为了防止浏览器读取图片缓存,造成验证码输入错误
然后自己就复制了一个带random的验证码网址刷新了两下结果发现验证码真的会变,不是根据random,于是从网上查找得知只输入random参数前的地址即可,于是继续向下开展。
具体的思路是登陆将验证码下载下来,然后手动输入,提交账号、密码、验证码三个数据进行模拟登陆。
(一)模拟登陆
# coding:utf8
import re
import urllib
import urllib2
import cookielib
loginUrl = 'http://115.24.160.162/loginAction.do'
#cookie
cookie = cookielib.CookieJar()
handler = urllib2.HTTPCookieProcessor(cookie)
opener = urllib2.build_opener(handler)
#postdata
values = {
'zjh':'xxxxxx',
'mm':'xxxxxx',
'v_yzm':''
}
postdata = urllib.urlencode(values)
#headers
header = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',
'Referer':'http://115.24.160.162/loginAction.do'
}
#第一次请求网页得到cookie
request = urllib2.Request(loginUrl,postdata,headers=header)
response = opener.open(request)
print '第一次请求网页得到cookie:'
print response.getcode()
#获取验证码----------------!!!问题一直出在这,
#要用带cookie的方法访问验证码的网页---这样的话进入的验证码的页面对应的验证码就是登陆页面的验证码了哈哈哈哈哈
#(之前用的是不带cookie的urlopen()方法...)
yzm = opener.open('http://115.24.160.162/validateCodeAction.do')
yzm_data = yzm.read()
yzm_pic = file('yzm.jpg','wb')
yzm_pic.write(yzm_data)
yzm_pic.close()
#用户输入验证码
print '请输入验证码:'
values['v_yzm'] = raw_input()
#带验证码模拟登陆
postdata = urllib.urlencode(values)
request = urllib2.Request(loginUrl,postdata,header)
response = opener.open(request)
print 'Response of loginAction.do'
print response.read().decode('gbk')
之后,抓取数据的方法和我之前讲的方法一样,继续操作。
网友评论