首頁 > 軟體

selenium中BasicAuth認證彈框處理

2022-07-11 18:02:33

一、什麼是BasicAuth

網友見面:

例如王二狗和牛翠花兩個人在網上都互動半年了還沒有見面,於是二狗向翠花發出了誠摯的邀請:翠花,五一來天津玩吧,我請你吃麻辣燙!本來二狗想先視訊一下到時候好認人,但翠花說那樣就沒有驚喜感了。於是兩人就採取了最原始的認證方式:對暗號,到時候翠花喊:天王蓋地虎。二狗就喊:翠花好漂亮。

沒錯,這種方式就是HTTP基本認證。

對映到網際網路為:

1、使用者端:伺服器,請把logo.jpg圖片返回給我

GET /logo.jpg HTTP/1.1

2、伺服器:使用者端你好,這個資源在安全區Authorization裡,是受限資源,需要基本認證,請帶上你的使用者名稱和密碼再來

HTTP/1.1 401 Authorization Required
www-Authenticate: Basic realm= "Authorization" 

伺服器會返回401,告知使用者端這個資源需要使用基本認證的方式存取。

我們可以看到在

www-Authenticate

這個Header裡面 有兩個值,

Basic:說明需要基本認證,

realm:說明使用者端需要輸入這個安全區的使用者名稱和密碼,而不是其他區的。

3、使用者端:伺服器,我已經按照你的要求,攜帶了相應的使用者名稱和密碼資訊了,你看一下。 如果使用者端是瀏覽器,那麼此時就會彈出一個彈窗,讓使用者輸入使用者名稱和密碼。

Basic 內容為: 使用者名稱:密碼 的base64形式 。

例如我的使用者名稱為Shusheng007,密碼為ss007。那麼我的Basic的內容為 Shusheng007:ss007 對應的base64 編碼內容U2h1c2hlbmcwMDcldUZGMUFzczAwNw==,如下所示

GET /logo.jpg  HTTP/1.1 
Authorization: Basic U2h1c2hlbmcwMDcldUZGMUFzczAwNw==

4、伺服器:使用者端你好,我已經校驗了你的使用者名稱和密碼,是正確的,這是你要的資源。

HTTP/1.1 200 OK Content-type: image/jpg ...

至此這個HTTP事務就結束了,非常簡單的一個認證機制。

二、selenium處理思路

因為非常像彈出框,首先我們想到的思路是alert處理模組。

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://ip:port/admin.php/index/index")
driver.switch_to.alert.send_keys("hello")

input("...")
driver.quit()

但是程式碼會報錯,提示找不到alert警告框

接下來考慮是不是UI自動化的詬病,要加延遲,安排!

from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://ip:port/admin.php/index/index")
time.sleep(5)
driver.switch_to.alert.send_keys("hello")

input("...")
driver.quit()

問題依舊~

接下來思考,當前這個彈框出現後是不能夠元素定位的,確定不是HTML,是瀏覽器的彈框。

接下來就想入非非了,Keys?pyautogui?最後想到HTTP協定是可以攜帶賬號和密碼的,但是通常不會這麼做。

格式為:http://username:password@host:port/path/query parameter

程式碼試驗如下:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://username:password@ip:port/admin.php")

input("...")
driver.quit()

的確跳過授權框,進入到網頁登入頁面。

到此這篇關於selenium中BasicAuth認證彈框處理的文章就介紹到這了,更多相關selenium BasicAuth認證彈框內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com