python爬虫之获取验证码登陆

#--coding:utf-8#author:wuhao##这里我演示的就是本人所在学校的教育系统#import urllib.requestimport urllib.parseimport reimport shutilimport 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的网址的URLurl = "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"#headerheader=\    {        "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("登陆成功")

运行结果

				
时间: 2024-11-14 08:53:31

python爬虫之获取验证码登陆的相关文章

python爬虫中图形验证码的处理

使用python爬虫自动登录时,遇到需要输入图形验证码的情况,一个比较简单的处理方法是使用打码平台识别验证码. 使用过两个打码平台,打码兔和若快,若快的价格更便宜,识别率相当.若快需要注册两个帐号:开发者帐号与用户帐号,用户帐号用于发送识别请求,开发者帐号可以注册软件id,并于识别请求进行绑定,可以参与识别收入的分成返现. 获取图形验证码目前发现的有两种方式: 0x01 在抓包中可以直接获得图片:发送get请求可以直接获取图片(png或jpg格式),这种情况可以使用request.get()返回

[Python爬虫] Selenium获取百度百科旅游景点的InfoBox消息盒

前面我讲述过如何通过BeautifulSoup获取维基百科的消息盒,同样可以通过Spider获取网站内容,最近学习了Selenium+Phantomjs后,准备利用它们获取百度百科的旅游景点消息盒(InfoBox),这也是毕业设计实体对齐和属性的对齐的语料库前期准备工作.希望文章对你有所帮助~ 源代码 1 # coding=utf-8 2 """ 3 Created on 2015-09-04 @author: Eastmount 4 """ 5

python爬虫3——获取审查元素(板野友美吧图片下载)

测试环境:python2.7 + beautifulsoup4.4.1 + selenium2.48.0 测试网址:http://tieba.baidu.com/p/2827883128 目的是下载该网页下所有图片,共160+张.可以分为以下几步: 1.获取网页源代码. 发现直接通过urllib2或者request获取到的源代码和实际图片对应不起来,通过chrome审查元素功能可以查询到对应的图片,猜测是该页面的图片加载是通过ajax异步传输的.因此使用工具selenium + chromedr

【20171104早】python爬虫之username,password登陆

工欲善其事,必先利其器.网站只能通过交互式登陆吗?当然不是,作为网络蛮荒世界的一个剑客,老黑欲练就自由之剑,呵呵,就是用代码编写可以自动登陆系统的工具,从而获取想要的数据. 简单版: 样板网站: 成绩系统:http://jwc.ecjtu.jx.cn/mis_o/login.htm 账号:jwc 密码:jwc Now! Let's go! go ! go! s1:获取实际登陆的url,老黑使用了firefox,live http headers工具,填入账号密码后,获取到实际登陆的url为htt

Python 爬虫案例-web微信登陆与消息发送

首先回顾下网页微信登陆的一般流程 1.打开浏览器输入网址 2.使用手机微信扫码登陆 3.进入用户界面 1.打开浏览器输入网址 首先打开浏览器输入web微信网址,并进行监控: https://wx.qq.com/ 可以发现网页中包含了一个新的url,而这个url就是二维码的来源. https://login.weixin.qq.com/qrcode/wbfd1Z-a0g== 可以猜测一下获取url的一般网址就是https://login.weixin.qq.com/qrcode,而wbfd1Z-a

python爬虫之处理验证码

云打码实现处理验证码 处理验证码,我们需要借助第三方平台来帮我们处理,个人认为云打码处理验证码的准确度还是可以的 首先第一步,我们得先注册一个云打码的账号,普通用户和开发者用户都需要注册一下 然后登陆普通用户,登陆之后的界面是这样的, 你需要有几分才可以使用它. 第二步登陆开发者用户: 然后点击开发文档 进入之后点击下载python相关的模块 下载之后我们解压之后发现是里面有三个文件: 这里以python3的代码为例: import http.client, mimetypes, urllib,

Python爬虫学习笔记——豆瓣登陆(一)

#-*- coding:utf-8 -*- import requests from bs4 import BeautifulSoup import html5lib import re import urllib url1 = 'http://accounts.douban.com/login' url2 = 'http://www.douban.com/people/*****/contacts' formdata={ "redir":"http://www.douban

python爬虫--自动获取seebug的poc

简单的写了一个爬取www.seebug.org上poc的小玩意儿~ 首先我们进行一定的抓包分析 我们遇到的第一个问题就是seebug需要登录才能进行下载,这个很好处理,只需要抓取返回值200的页面,将我们的headers信息复制下来就行了 (这里我就不放上我的headers信息了,不过headers里需要修改和注意的内容会在下文讲清楚) headers = { 'Host':******, 'Connection':'close', 'Accept':******, 'User-Agent':*

python开发 getpass获取操作系统登陆名

需用使用python getpass模块 import getpass def get_system_user_name(): return getpass.getuser() def main(): username = get_system_user_name() print ('The system user\'s name is:[{}]'.format(username)) if __name__ == "__main__": main() 打印输出:(可以看到登陆名为adm