requests模拟登陆江苏海洋大学教务处(带验证码登陆)

本文介绍了如何使用requests库模拟登录江苏海洋大学教务处的流程,包括获取验证码的URL(http://zf.hhit.edu.cn/CheckCode.aspx),处理cookies以及POST登录请求至http://zf.hhit.edu.cn/default2.aspx。用户需手动输入验证码,随后提交用户名、密码和验证码进行登录。
摘要由CSDN通过智能技术生成

获取验证码的网址和post的网址

进入登陆页面,打开开发者工具,刷新页面,找到checkcode.aspk,向网址http://zf.hhit.edu.cn/CheckCode.aspx发送请求,每次返回一个随机的验证码,并且在请求头中还带有cookie的值。
在这里插入图片描述
在这里插入图片描述
我们先来获取验证及其request中的cookie,并由人工输入

 def codecheck(self):
        check_url = 'http://zf.hhit.edu.cn/CheckCode.aspx'
        response = requests.get(check_url, headers=self.headers)
        with open('checkcode.jpg', 'wb') as f:
            f.write(response.content)
        image = Image.open('./checkcode.jpg')
        image.show()
        check_code = input('请输入验证码:')
        return check_code, requests.utils.dict_from_cookiejar(response.cookies)

然后输入用户名、密码、验证码,点击登陆
在这里插入图片描述
找到default2.aspk,可以看到发送的方式是post,而且Status Code: 302 Found,表示是重定向页面,我们发送post请求是向http://zf.hhit.edu.cn/default2.aspx这个页面发送的
在这里插入图片描述
翻到最下面找到formdata,这些就是我们要post的数据,记得要点击一下url encode
在这里插入图片描述
以下是完整代码

import requests
from PIL import Image


class HDSpider:
    def __init__(self):
        self.__VIEWSTATE = 'dDwxNTMxMDk5Mzc0Ozs+AdTOwuk1s1dKYN9ZfAssbX8ZnDM='
        self.RadioButtonList1 = '%D1%A7%C9%FA'
        self.txtUserName = '你的学号'
        self.TextBox2 = '你的密码'
        self.headers = {'User-Agent': "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 "
                                      "(KHTML, like Gecko) Chrome/45.0.2438.3 Safari/537.36", }

    def codecheck(self):
        check_url = 'http://zf.hhit.edu.cn/CheckCode.aspx'
        response = requests.get(check_url, headers=self.headers)
        with open('checkcode.jpg', 'wb') as f:
            f.write(response.content)
        image = Image.open('./checkcode.jpg')
        image.show()
        check_code = input('请输入验证码:')
        return check_code, requests.utils.dict_from_cookiejar(response.cookies)

    def login(self):
        url = 'http://zf.hhit.edu.cn/default2.aspx'
        txtSecretCode, cookies = self.codecheck()
        postdata = {'__VIEWSTATE': self.__VIEWSTATE, 'txtUserName': self.txtUserName, 'Textbox1': '',
                    'TextBox2': self.TextBox2, 'txtSecretCode': txtSecretCode, 'RadioButtonList1': self.RadioButtonList1
                    , 'Button1': '', 'lbLanguage': '', 'hidPdrs': '', 'hidsc': ''}
        request = requests.post(url,cookies=cookies, data=postdata, headers=self.headers)
        request.encoding = request.apparent_encoding
        print(request.text)


if __name__ == '__main__':
    spider = HDSpider()
    spider.login()

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值