0

我正在寫一個python腳本,從我的學校網站下載課堂內容(mp4,pdf)。我的學校使用Weblogin SSO身份驗證來訪問他們的任何受保護的URL。如何處理javascript內容並在成功登錄weblogin SSO後進行重定向?

我能夠驗證使用下面的腳本的第一部分,我的憑據:

#1. Authenticate 
login_url = "https://weblogin.MY_SCHOOL.edu/login" 
payload = {'login':'my_loging','password':'my_pass'} 
target_url = "https://My_SCHOOL.instructure.com/courses/12345678"" 

with requests.Session() as c: 
    req_headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36}'} 
    c.headers.update(req_headers) 
    c.get(login_url) # to get cookies 
    c.post(url1, data=payload) #,headers = req_headers) 

#2. get html from target site 
    W1 = c.get(target_url) 
    print(W1.url) 
    print(W1.text) 

#3. parse html and download content. 
    #tbc 

我可以看到我的驗證是成功的c.post.text,但whenver我嘗試訪問任何的目標網站使用get()在相同的requests.session()中,我沒有得到我的班級預期的html內容,而是一條消息,內容如下:

「既然你的瀏覽器不支持JavaScript,您必須按一下 繼續按鈕才能繼續「

而且目標URL重定向到這個網址:

https://idp.MY_SCHOOL.edu/idp/profile/SAML2/Redirect/SSO

我爲什麼不能成功SSO身份驗證後訪問目標網址?我不確定請求模塊中的javascript支持是否是這裏的問題,因爲即使當我在我的Internet瀏覽器中禁用JS支持時,我也能夠看到target_url的一些html內容,儘管不是全部。這似乎很奇怪,我的get()請求卡在重定向的URL:「https:.../SAML2 /重定向/ SSO」

我很感激任何關於如何解決此問題的指針。我不想使用硒或機械化等webdrivers。我已經使用QtWebkit來呈現Javascript內容,但我不知道是否可以將我的身份驗證cookie從我的request.session()傳輸到QtWebkit。

任何幫助,非常感謝。謝謝

+0

該代碼嵌入我的問題。我不知道你還需要什麼...... – ricardo3889

回答

0

我不是SSO的專家,但我想我知道發生了什麼事情。在典型的情況下,您的瀏覽器會將您的登錄憑據發佈到登錄網址。響應將是一個包含表單的html頁面。該表單將包含您的SSO令牌。在html頁面中,嵌入式JavaScript會將表單提交給您嘗試訪問的應用程序。該應用程序將驗證令牌,然後授予您訪問權限。當啓用JavaScript時,這會無縫地發生。如果您在瀏覽器中關閉JavaScript並嘗試登錄,則會出現相同的消息,您將不得不按下按鈕以提交包含令牌的表單。要通過腳本執行此操作,您必須必須解析表單,獲取令牌值,然後自行發佈。

+0

感謝詹姆斯的評論。我認爲這是發生在這裏的事情。你知道我怎麼能解析表單來獲取令牌值並自己發佈?我不認爲我可以用request.session()來做到這一點。 – ricardo3889

相關問題