python爬虫之获取验证码登陆
#--coding:utf-8
#author:wuhao
#
#这里我演示的就是本人所在学校的教务系统
#
import urllib.request
import urllib.parse
import re
import shutil
import http.cookiejar class LoginJust():
def __init__(self,url,url1,url2,header,account,pwd):
self.url=url
self.url1=url1
self.url2=url2
self.header=header
self.account=account
self.pwd=pwd
return #创建opener,包含header信息和cookie
def CreateOpener(self):
#实例化cookie对象
cookie=http.cookiejar.CookieJar()
#创建一个cookie处理器
CookieHandle=urllib.request.HTTPCookieProcessor(cookie)
#创建带有cookie的opener
opener=urllib.request.build_opener(CookieHandle)
#传入header
head=[]
for key,value in self.header.items():
elem=(key,value)
head.append(elem)
opener.open(self.url)
return opener #获取验证码图片,并保存到本地
def getImage(self,opener):
path = "imageCode_1.jpg"
# 带cookie和header
img = opener.open(self.url2)
with open(path, "wb") as f:
shutil.copyfileobj(img, f)
#print(os.stat(path).st_size, 'characters copied')
return #获取后台发送来的字符串
def getResponse(self,opener):
getReponse = opener.open(self.url1)
#
gRResult = getReponse.read().decode("utf-8")
return gRResult #获取post所需的encoded参数
def achieveCode(self,response):
# scode、sxh是response中得来
scode = response.split("#")[0]
sxh = response.split("#")[1]
# userAccount、userPassword
userAccount = self.account
userPassword =self.pwd
code = userAccount + "%%%" + userPassword
# 最终需要获取的post的数据
encode = ""
# 进行账号密码加密,获取code的值
i = 0
while (i < len(code)):
if i < 20:
encode = encode + code[i:i + 1] + scode[0:int(sxh[i])]
# print(str(i)+"_encode:"+encode)
scode = scode[int(sxh[i]):len(scode)]
# print(str(i)+"_scode:"+scode)
else:
encode = encode + code[i:len(code)]
# print(str(i)+"_here_encode"+encode)
i = len(code)
i = i + 1
return encode #判断登陆是否成功
def IsLoginS(self,encoded):
#验证码的值
codeValue=input("请输入验证码:")
data={"useDogCode":"","encoded":encoded,"RANDOMCODE":codeValue}
#把data转换为post的数据格式
postData=urllib.parse.urlencode(data)
result=opener.open(self.url,postData.encode("utf-8"))
Result=result.read().decode("utf-8")
regex=re.compile(r"1440407133")
#print(type(regex.search(Result)))
if regex.search(Result)!=None:
return True
else:
print("Someting Error happened:登陆失败")
return False #再次请求验证码 # 需要post的网址的URL
url = "http://jwgl.just.edu.cn:8080/Logon.do?method=logon"
# 获取后台数据的网址
url1 = "http://jwgl.just.edu.cn:8080/Logon.do?method=logon&flag=sess"
# 获取验证码图片的地址
url2 = "http://jwgl.just.edu.cn:8080/verifycode.servlet"
#header
header=\
{
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36",
"Referer":"http://jwgl.just.edu.cn:8080/Logon.do?method=logon",
"Host":"jwgl.just.edu.cn:8080",
"Connection":"keep-alive",
"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Encoding":"gzip, deflate",
"Accept-Language":"zh-CN,zh;q=0.8",
"Upgrade-Insecure-Requests":"1",
"Cache-Control":"max-age=0",
}
account=input("请输入用户名:")
pwd=input("请输入密码:")
#实例化对象
lj=LoginJust(url,url1,url2,header,account,pwd)
opener=lj.CreateOpener()
lj.getImage(opener)
encoded=lj.achieveCode(lj.getResponse(opener))
if lj.IsLoginS(encoded):
print("登陆成功") 运行结果
python爬虫之获取验证码登陆的更多相关文章
- Python爬虫学习 - day2 - 站点登陆
利用Python完成简单的站点登陆 最近学习到了爬虫,瞬时觉得很高大上,想取什么就取什么,感觉要上天.这里分享一个简单的登陆抽屉新热榜的教程(因为它不需要验证码,目前还没有学会图像识别.哈哈),供大家 ...
- python爬虫中图形验证码的处理
使用python爬虫自动登录时,遇到需要输入图形验证码的情况,一个比较简单的处理方法是使用打码平台识别验证码. 使用过两个打码平台,打码兔和若快,若快的价格更便宜,识别率相当.若快需要注册两个帐号:开 ...
- python爬虫之浅析验证码
一.什么是验证码? 验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”( ...
- python爬虫模拟登录验证码解决方案
[前言]几天研究验证码解决方案有三种吧.第一.手工输入,即保存图片后然后我们手工输入:第二.使用cookie,必须输入密码一次,获取cookie:第三.图像处理+深度学习方案,研究生也做相关课题,就用 ...
- [Python爬虫] Selenium获取百度百科旅游景点的InfoBox消息盒
前面我讲述过如何通过BeautifulSoup获取维基百科的消息盒,同样可以通过Spider获取网站内容,最近学习了Selenium+Phantomjs后,准备利用它们获取百度百科的旅游景点消息盒(I ...
- python爬虫3——获取审查元素(板野友美吧图片下载)
测试环境:python2.7 + beautifulsoup4.4.1 + selenium2.48.0 测试网址:http://tieba.baidu.com/p/2827883128 目的是下载该 ...
- python爬虫之处理验证码
云打码实现处理验证码 处理验证码,我们需要借助第三方平台来帮我们处理,个人认为云打码处理验证码的准确度还是可以的 首先第一步,我们得先注册一个云打码的账号,普通用户和开发者用户都需要注册一下 然后登陆 ...
- Python爬虫教程:验证码的爬取和识别详解
今天要给大家介绍的是验证码的爬取和识别,不过只涉及到最简单的图形验证码,也是现在比较常见的一种类型. 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻 ...
- Python爬虫学习笔记——豆瓣登陆(三)
之前是不会想到登陆一个豆瓣会需要写三次博客,修改三次代码的. 本来昨天上午之前的代码用的挺好的,下午时候,我重新注册了一个号,怕豆瓣大号被封,想用小号爬,然后就开始出问题了,发现无法模拟登陆豆瓣了,开 ...
随机推荐
- Squid代理服务器安装
代理服务器的功能是代替网络用户去访问网络信息,并把获得的信息返回给用户,其工作步骤大致如下: ) 客户机向代理服务器发起访问互联网的请求 ) 代理服务器收到请求后检查请求是否被允许,如果允许将会进行下 ...
- 团队作业7---Alpha冲刺之事后诸葛亮
一.设想与目标 1.我们的软件要解决什么问题? 我们的软件主要是帮助老师解决通过博客地址收集博客的相关信息来对学生对课程的认真与努力程度进行评定的问题,主要就是根据采集到的各项博客数据作为评分项,构建 ...
- 201521123077 《Java程序设计》第8周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 泛型类 利用泛型可以写出一个更加通用的类,比如下面的例子: class simpleHolder<T&g ...
- 201521123027 《JAVA程序设计》第3周学习总结
1.本周学习总结 2.书面作业 Q1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; pu ...
- 201521123119《Java程序设计》第9周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 Q1.常用异常 题目5-1 Q1.1 截图你的提交结果(出现学号) Q1.2 ...
- php环境和apache服务启动不的解决方法
安装服务器,可能需要设置apache的端口号,用记事本打开httpd.conf ctrl+F搜索80,在中间添加数字8 08 0,不解释 在sql中配置好了服务器 服务器安装路径中的WWW文件作为服 ...
- Mysql的基本命令图
如果看不清的,右键图片在新标签页打开! 这是经过我的整理出来的!如果有重要的再补充把-..
- 检测Linux硬盘IO数据
首先安装sysstat(有些系统会预装): apt install sysstat 然后使用命令: iostat -x -k 2 x选项用于显示和io有关的扩展数据 k某些使用block为单位的字段改 ...
- WPF控件自适应屏幕
如果说界面设计,那么自适应问题一定无法避免,今天就来分享一下,wpf如何实现自适应,先看一下效果:(文末添加源代码下载) 基本思路就是用 Grid 的网格,进行宽度的自动填充适应, 不过对于 ...
- “==”与"equals(object)"的区别
一.对于基本数据类型而言只能用“==”,不能用equals来进行比较,若使用equals来进行比较,则不能通过编译 二.在非字符串的对象的比较中: “==”与“equals()”比较的均是对象在堆内存 ...