使用Python进行模拟登陆

本文指导如何使用Python代码模拟中国矿业大学图书馆的登陆流程,包括获取cookie、构造headers和post数据,最终实现自动化登陆。

使用Python进行模拟登陆

今天就以中国矿业大学的图书馆为例,讲一下如何用python进行模拟登陆
矿大图书馆登陆页面:http://121.248.104.139:8080/reader/login.php

首先定义一个获取cookie的函数:
def get_cookie(url):
    try:
        # 获取一个保存cookie的对象
        cj = cookielib.LWPCookieJar()
        # 将一个保存cookie对象,和一个HTTP的cookie的处理器绑定
        cookie_support = urllib2.HTTPCookieProcessor(cj)
        # 创建一个opener,将保存了cookie的http处理器,还有设置一个handler用于处理http的URL的打开
        opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)
        # 将包含了cookie http处理器、http的handler的资源和urllib2对象绑定在一起
        urllib2.install_opener(opener)
        resp = urllib2.urlopen(url);
        print "获取cookie成功!网络连接正常"
    except Exception as e:
        print "获取cookie失败!请检查网络设置"

接下来构造healder和我们post的数据:
healder = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.103 Safari/537.36',
           'Referer':'http://121.248.104.139:8080/reader/redr_verify.php'}
postData = {'number':'123456',#账号
            'passwd':'123456',#你的密码
            'select':'cert_no',#特有参数,在本网站代表证件号,条码号,Email三个选项中的第一个选项
            }
做完这些准备 我们只需要使用Python的urllib和urllib2库进行模拟登陆操作就可以了,完整代码:

# -*- coding: cp936 -*-
import urllib
import urllib2
import cookielib

def get_cookie(url):
    try:
        # 获取一个保存cookie的对象
        cj = cookielib.LWPCookieJar()
        # 将一个保存cookie对象,和一个HTTP的cookie的处理器绑定
        cookie_support = urllib2.HTTPCookieProcessor(cj)
        # 创建一个opener,将保存了cookie的http处理器,还有设置一个handler用于处理http的URL的打开
        opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)
        # 将包含了cookie http处理器、http的handler的资源和urllib2对象绑定在一起
        urllib2.install_opener(opener)
        resp = urllib2.urlopen(url);
        print "获取cookie成功!网络连接正常"
    except Exception as e:
        print "获取cookie失败!请检查网络设置"
healder = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.103 Safari/537.36',
           'Referer':'http://121.248.104.139:8080/reader/redr_verify.php'}
postData = {'number':'123456',#账号
            'passwd':'000000',#你的密码
            'select':'cert_no',#特有参数,在本网站代表证件号,条码号,Email三个选项中的第一个选项
            }
request_url = 'http://121.248.104.139:8080/reader/login.php'
login_url = 'http://121.248.104.139:8080/reader/login.php'
#模拟登陆
def main_action(loginurl,posturl,headlers,postData):
    #调用函数获取cookie
    get_cookie(loginurl)   #loginUrl
    print "正在执行模拟登陆请稍等......\n"
    try:
        postData = urllib.urlencode(postData)
        #通过urllib2提供的request方法来向指定Url发送我们构造的数据,并完成登录过程  
        request = urllib2.Request(posturl, postData, headlers)  
        print request  
        response = urllib2.urlopen(request)
        print response
        text = response.read().decode("utf-8")
        print text
        print "模拟登陆成功"
    except Exception as e:
        print "模拟登陆失败!"
        print e
main_action(login_url,request_url,healder,postData)#调用函数
关于post要提交的数据可以使用浏览器自带的开发者工具分析,也可以使用一些抓包的工具


Python实现模拟登录有多种方法,以下为你介绍几种常见的: - **使用Selenium库**:可以调用浏览器来完成登录操作,写在代码里的操作(打开网页、点击等)会由浏览器忠实地执行。被控制的浏览器可以是Firefox、Chrome等,常用的是PhantomJS这个无头(没有界面)浏览器。将填写用户名密码、点击“登录”按钮、打开另一个网页等操作写到程序中,就能实现登录并得到响应 [^2]。 - **使用urllib库**:通过构造登录请求,处理cookie来实现登录。以下是使用urllib库模拟登录豆瓣网的示例代码: ```python # -*- coding: UTF-8 -*- import sys import io import urllib.request import http.cookiejar #登录时需要POST的数据 data = {'source':'index_nav', 'form_email':'******', 'form_password':'******'} post_data = urllib.parse.urlencode(data).encode('utf-8') #设置请求头 headers = {'User-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'} #登录时表单提交到的地址(用开发者工具可以看到) login_url = ' https://www.douban.com/accounts/login' #构造登录请求 req = urllib.request.Request(login_url, headers = headers, data = post_data) #构造cookie cookie = http.cookiejar.CookieJar() #由cookie构造opener opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookie)) #发送登录请求,此后这个opener就携带了cookie,以证明自己登录过 resp = opener.open(req) #登录后才能访问的网页 url = 'https://www.douban.com' #构造访问请求 req = urllib.request.Request(url, headers = headers) resp = opener.open(req) print(resp.read().decode('utf-8')) ``` 此代码通过构造登录请求,携带登录所需的POST数据,设置请求头,处理cookie,发送登录请求,之后使用携带cookie的opener访问登录后才能访问的网页 [^3]。 - **使用requests库**:可以先模拟登录,然后携带得到的cookie访问页面。以下是处理cookie字符串并模拟登录的示例代码: ```python import requests import sys import io sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') #改变标准输出的默认编码 #登录后才能访问的网页 url = 'http://ssfw.xmu.edu.cn/cmstar/index.portal' #浏览器登录后得到的cookie,也就是刚才复制的字符串 cookie_str = r'JSESSIONID=xxxxxxxxxxxxxxxxxxxxxx; iPlanetDirectoryPro=xxxxxxxxxxxxxxxxxx' #把cookie字符串处理成字典,以便接下来使用 cookies = {} for line in cookie_str.split(';'): key, value = line.split('=', 1) cookies[key] = value ``` 该代码将浏览器登录后得到的cookie字符串处理成字典,以便后续使用 [^4]。 - **先获取Cookies再Get请求直接登录**:此方法是模拟登录操作方法中的一种,对于仅需输入账号密码,不需要获取相关加密参数(如Authenticity_token),也无需输入验证码的网站,这种方法比较简单 [^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值