目的:让s 会话参数在多个 py 文件之间传递
1.函数返回值方式传递



2.单例实现全局参数存储
globalmanager.py:
class GlobalManager(object):
"""模块间共享变量"""
_globaldict = {}
_instance = False
def get_value(self, name):
try:
return self._globaldict[name]
except KeyError as e:
print("获取的变量名称:{}不存在!!!!!!!!!!!!!!!".format(name))
return None
def set_value(self, name, value):
self._globaldict[name] = value
def __new__(cls, *args, **kwargs): #单例,固定写法
if cls._instance == False:
cls._instance = super().__new__(cls, *args, **kwargs)
return cls._instance
if __name__ == "__main__":
globalm = GlobalManager()login.py:
import requests
from globalmanager import GlobalManager
#密码的加密逻辑:md5(md5(password) + rand)
#1.md5方法:md5.js
#2.password:123456
#3.rand:http://zentaomax.demo.zentao.net/user-refreshRandom.html
gm = GlobalManager()
def login():
s = requests.session() #创建会话保存器
gm.set_value("huihua",s)
#获取cookie
url_cookie = 'http://zentaomax.demo.zentao.net/user-login.html'
header_cookie = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36",
"Referer": "http://zentaomax.demo.zentao.net/my/"
}
res_cookie = gm.get_value('huihua').get(url_cookie,headers=header_cookie)
d = requests.utils.dict_from_cookiejar(res_cookie.cookies)
print(d)
#密码的加密
#1.rand获取
url_rand = 'http://zentaomax.demo.zentao.net/user-refreshRandom.html'
header_rand = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36",
"X-Requested-With": "XMLHttpRequest",
"Referer": "http://zentaomax.demo.zentao.net/user-login.html"
}
res_rand = gm.get_value('huihua').get(url_rand,headers=header_rand)
print(res_rand.text)
#2.python实现调用js文件中的方法md5
password = '123456'
from encrypt import ExecJs
e = ExecJs()
step1 = e.get_encrypt_pwd('md5',password)
step2 = e.get_encrypt_pwd('md5',step1 + res_rand.text)
print(step2)
#禅道登录
url = 'http://zentaomax.demo.zentao.net/user-login.html'
data = {
"account": "demo",
"password": step2,
"passwordStrength": "0",
"referer": "/",
"verifyRand": res_rand.text,
"keepLogin": "0",
"captcha": ""
}
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"Host": "zentaomax.demo.zentao.net",
"Connection": "keep-alive",
"Content-Length": "127",
"Accept": "application/json, text/javascript, */*; q=0.01",
"X-Requested-With": "XMLHttpRequest",
"Origin": "http://zentaomax.demo.zentao.net",
"Referer": "http://zentaomax.demo.zentao.net/user-login.html",
"Accept-Encoding":"gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9"
}
res = gm.get_value('huihua').post(url,data=data,headers=header)
print(res.text)
myinfo.py:
# 个人档案接口
import requests
from login import login
from globalmanager import GlobalManager
gm = GlobalManager()
def myinfo():
url = 'http://zentaomax.demo.zentao.net/my-profile.html'
query_str = {
"onlybody": "yes"
}
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36"
}
res = gm.get_value('huihua').get(url=url,headers=header,params=query_str)
return res.text
#1.登录
login()
#2.个人档案
res = myinfo()
print(res)