python利用cookiejar和requests.session()模拟登录,访问登录后页面操作

19 篇文章 1 订阅
9 篇文章 1 订阅
import urllib.request
from http import cookiejar
from urllib import parse

login_url = 'https://pos.XXXXX.com/j_spring_security_check'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36',
}
data_form = {
'j_username': "188",
'j_password': "zha"
}
# 访问登录后的页面
center_url = 'https://pos.XXXXX.com/myprofile/myprofile.html'

# 第一种方法
# 将来调用的参数需要转码,post请求的data要求是bytes类型
print(parse.urlencode(data_form)) # j_username=188&j_password=zha,这是str类型
data_form = parse.urlencode(data_form).encode('utf-8')
# 创建cookiejar对象保存cookie
cook_jar = cookiejar.CookieJar()
# 定义有添加cookie功能的处理器
cook_handler = urllib.request.HTTPCookieProcessor(cook_jar)
# 根据处理器生成opener
opener = urllib.request.build_opener(cook_handler)
#发送post请求
login_request = urllib.request.Request(login_url,headers=headers,data=data_form)
# 如果登录成功,cookiejar则会保存cookie
opener.open(login_request)
center_request = urllib.request.Request(center_url,headers=headers)
response = opener.open(center_request)
data = response.read().decode()
with open('cookiejar.html', 'w', encoding='utf-8')as f:
    f.write(data)
# 退出登录
opener.open('https://pos.XXXXX.com/j_spring_security_logout')

# 第二种方法
import requests
from lxml import etree
# requests.session():维持会话,可以让我们在跨请求时保存某些参数
session = requests.session()
# 尝试登录,如果登录成功
response = session.post(login_url,data=data_form, headers=headers)
if response.status_code == 200:
    response = session.get(center_url,headers=headers)
    if response.status_code == 200:
        data = response.text
        html = etree.HTML(data)
        print(html.xpath('//*[@id="contentwrapper"]/form/p[1]/span/text()')[0].strip())
        with open('session.html','w',encoding='utf-8')as f:
            f.write(data)
        # 退出登录
        session.get('https://pos.XXXXX.com/j_spring_security_logout')

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值