我正在尝试构建一个python脚本,它将自动打开我的大学网站并登录。该站点使用CAS进行身份验证,我使用请求模块将我的凭据传递给登录表单。无论我尝试什么,我都无法通过登录屏幕。
这是我的代码:
import requests, webbrowser, sys
with requests.Session() as s:
url = 'https://signin.bradley.edu/cas/login?service=https://mybu.bradley.edu/MyBU/Login'
USERNAME = ''
PASSWORD = ''
response = s.get(url)
content = str(response.content)
LT = content[2558:2599]
EXECUTION = content[2660:2666]
ID = content[2726:2734]
print(LT)
print(EXECUTION)
print(ID)
login_headers = {'User-Agent':'Mozilla/5.0',
'Referer':"https://signin.bradley.edu/cas/login?service=https://mybu.bradley.edu/MyBU/Login"}
payload = {'username':USERNAME,
'password':PASSWORD,
'lt':LT,
'execution':EXECUTION,
'_eventId':ID}
response = s.post(url, data=payload, headers = login_headers)
print(response.status_code)
print(response.content)
我使用字符串切片来提取添加到POST消息有效负载所需的隐藏表单值(LT令牌,执行,_eventId)。脚本体中间的三个打印语句用于调试目的。
以下是脚本输出的一个实例:
"LT-55040-XwgXJsgy2bpnc59lGKTJutrS7amrrG"
"e1s1"
"submit"
500
b'\n\n<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\n\n\n\n\n\n\n\n\n<html xmlns="http://www.w3.org/1999/xhtml" lang="en">\n\t<head>\n\t <title>Bradley University Signin Service</title>\n \n\t\t\n <link type="text/css" rel="stylesheet" href="/cas/css/cas.css" />\n <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\n\t <link rel="icon" href="/cas/favicon.ico" type="image/x-icon" />\n\t</head>\n\t<body id="cas" class="fl-theme-iphone">\n <div class="flc-screenNavigator-view-container">\n <div class="fl-screenNavigator-view">\n <div id="header" class="flc-screenNavigator-navbar fl-navbar fl-table">\n\t\t\t\t\n <h1 id="app-name" class="fl-table-cell">Bradley University Signin Service</h1>\n </div>\t\t\n <div id="content" class="fl-screenNavigator-scroll-container">\n\t\t<div id="welcome">\n\t\t\t<h2>CAS is Unavailable</h2>\n\n\t\t\t<p>\n\t\t\t There was an error trying to complete your request. Please notify your support desk or try again.\n\t\t\t</p>\n\t\t</div>\n\n\n\n</div>\n <div id="footer" class="fl-panel fl-note fl-bevel-white fl-font-size-80">\n \n \n\n <p>Served by snape </p>\n \n \t<a id="jasig" href="http://www.jasig.org" title="go to Jasig home page"></a>\n <div id="copyright">\n <p>Copyright © 2005 - 2012 Jasig, Inc. All rights reserved.</p>\n <p>Powered by <a href="http://www.jasig.org/cas">Jasig Central Authentication Service 3.5.2.1</a></p>\n </div>\n </div>\n </div>\n </div>\n <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>\n <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.5/jquery-ui.min.js"></script>\n <script type="text/javascript" src="/cas/js/cas.js"></script>\n </body>\n</html>\n\n'
您可以看到我上面提到的隐藏值包含在print(response.content)
语句的输出中。
感谢您的帮助!