python中用分別用selenium、requests庫實現Windows認證登錄


最近在搞單位的項目,實現python自動化,結果在第一步就把我給拒之門外,查資料問大佬,問我們開發人員,從周一折騰到周五才搞定了

接下給大家分享一下

項目背景:我們系統是基於Windows平台實現的,登錄方式為Windows身份認證

一、web端登錄方式,selenium模塊實現

1、原來想用selenium實現,web端可不可以用WinSpy先定位在使用pywin32實現呢,嘗試一下發現,WinSpy這個工具根本定位不到我的登錄窗口,整個黑色的定位框無法定位登錄彈窗,網上說的Autoit這種方式估計和這個類似,都是操作Windows窗口,咱也不會,沒研究明白,如圖:

 2、中間還想過使用requests庫請求,獲取cookie(就是下面的第二中方法)的方式來實現,requests庫發起請求,返回請求頭中的Set-Cookie,利用Set-Cookie中的sessionid以及其他的必填參數來實現Windows身份認證,selenium中的webdriver發起請求時,將sessionid等一系列的參數帶上,使用這種方法來實現Windows認證,可是還是不行,直接報錯,說是無效的cookie域,具體報錯信息如下:

 

3、web這種方式更是奇葩,耗費了我一個半周的時間,咨詢了我們的小簡大佬、奔奔大佬依然還是沒有搞定,這不是搞我心態嘛,自信心全部被摧毀,一遍一遍的翻閱着百度、必應等搜索網站,期間我的同學L姐一直陪伴着我,幫助我解決問題,包括執行的步驟,截圖、錄像都用上了,最后的最后終於是搞定了,接下來給大家說一下,以后有同學遇到Windows身份認證了,可以使用這種方式進行登錄認證。

其實很簡單的原理,也看到過有帖子再說這種方法,就是將用戶名和密碼寫到url中,可是當時我沒有成功,關鍵在於特殊字符。

語法為:http://username:password@url

實現代碼如下,舉個栗子:

from selenium import webdriver


driver = webdriver.Chrome()
url = r"http://d%5cyuaxxx:xxx123@10.2.xx.xx/"  # 用戶名中含有特殊符號,這是轉義后的用戶名
driver.get(url)

這里千萬注意,如果你的username,password里邊含有特殊字符,如:!@#¥%……&*等等,一定要轉換為UrlEncode格式,不然肯定登錄不成功,一把血淚史呀

在這里特別感謝我L姐,沒有她我也解決不了這個問題

提供一個轉碼的網址:https://tool.chinaz.com/tools/urlencode.aspx

例如:“admin@1234”這個字符串,轉碼后為:

 

 

二、采用python中的requests庫實現Windows身份認證登錄

首先安裝requests庫,requests_ntlm庫

pip install requests
pip install requests_ntlm

 Windows身份登錄

import requests
from requests_ntlm import HttpNtlmAuth

requests.get("http://xxx.com",auth=HttpNtlmAuth('domain\\username','pwd'))

舉個例子:

登錄成功,並且可以得到header請求頭,sessionid等等一些信息

 

 參考文章:https://www.cnblogs.com/xbzhu/p/7743584.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM