最近模拟带账号登陆,查看了一些他人的博客,发现正方教务已经更新了,所以只能自己探索了。
登陆:
通过抓包,发现需要提交的值
需要值lt,这是个啥,其实他在访问登陆页面时就产生了
session=requests.Session() response = session.get(login_url, headers=header) cookies = response.cookies for c in cookies: cookie = c.name + ‘=‘ + c.value print(‘cookie-get:‘ + cookie) selector = etree.HTML(response.text) token = selector.xpath(‘//input[@name="lt"]/@value‘)[0] # 解析出登陆所需的lt信息 print(token)
得到lt的值,加入到自己创建的表单中
根据上面抓包工具中需要的值,创建所需表单
login_data={ ‘useValidateCode‘: ‘0‘, ‘isremenberme‘: ‘1‘, ‘ip‘:‘‘, ‘username‘: username, ‘password‘: password, ‘losetime‘: ‘30‘, ‘lt‘: token, ‘_eventId‘: ‘submit‘, ‘submit1‘:‘‘ }
post请求登陆:
response = session.post(login_url, data=login_data, headers=header) print(response.status_code)
我们成功了,哈哈哈,很开心!
进入了主页面:
这是我们登进的页面,要爬取成绩,成绩在教务系统中,细心观察
get下链接:http://******/xs_main.aspx?xh=***&type=1
response = session.get(main_url, headers=header) print(response.cookies) print(response.status_code) print(BeautifulSoup(response.text, ‘lxml‘))
response.status_code返回200,以为成功了?打印一下
额!难受,鬼刀一开,看不见........他竟然返回的是登陆界面?
究竟是什么问题呢,我怀疑是cookie:
因为
print(response.cookies)打印的值是: <RequestsCookieJar[]>浏览器访问抓包看下
啊嘞嘞,why?查看其他请求,在Cookie中竟然都没有创建过ASP.NET_SessionID那怎么办呢?那我自己写一个吧:
requests.utils.add_dict_to_cookiejar(session.cookies,{"ASP.NET_SessionId":"0ftp4drb5uar0r55urffkobr"})
哎呀,成功了。开心,不过似乎ASP.NET_SessionId有时效性。
不管了,也不知道为啥Session.Cookies得不到所需要的Cookie,先不管了,各位大佬,发现问题的话,或者有啥好的解决办法麻烦告诉下!拜谢
代码地址:https://github.com/JackyWjx/HNCU
原文地址:https://www.cnblogs.com/xr210/p/10335795.html
时间: 2024-10-01 19:15:19