python使用Selenium和cookie繞過驗證碼實現(xiàn)登錄示例代碼
利用selenium中獲取登陸過程所涉及的cookie信息:
方法 | 難易程度 |
通過抓包工具分析出cookie來,然后將cookie添加到對應(yīng)的頁面中去 | 有技術(shù)要求,簡單 |
先運行一次通過驅(qū)動器對象中的get_cookies方法獲取當前項目的所有cookie | 麻,準確性高 |
下面的實例主要以dsmall和crm系統(tǒng)為例。
第一種方式
http://192.168.141.100/index.php/home/login/login.html
首先抓取dsmall登陸的相關(guān)數(shù)據(jù)信息進行分析,下面是dsmall的首頁需要輸入驗證碼才能夠登陸成功
使用fiddler進行抓取dsmall的登陸請求響應(yīng)數(shù)據(jù),具體分析得到下面結(jié)果:
并且具體還可以得知該cookie是基于session的狀態(tài)上存在的,也就是只要建立好會話,后期實際只要把cookie信息添加進入,即可獲取到會話狀態(tài)了,所以具體實現(xiàn)代碼如下:
# cookieTest.py # 使用cookie完成免登陸的操作 from selenium import webdriver class DsmallCookie(object): def __init__(self): self.driver = webdriver.Chrome() #與服務(wù)器建立連接 self.driver.get("http://192.168.141.100/index.php/home/member/index.html") # 將cookie所對應(yīng)的值通過add_cookie()進行添加 self.driver.add_cookie({"name": "PHPSESSID", "value": "ejgbevl453upavmjd42nr8bq9v"}) # 刷新頁面或重新發(fā)送一次請求都可以完成登陸操作 # 刷新頁面 self.driver.refresh() # 重新發(fā)送一次請求 self.driver.get("http://192.168.141.100/index.php/home/member/index.html") if __name__ == '__main__': dsmall = DsmallCookie()
注意:add_cookie中傳入的參數(shù)必須是字典對象,可以通過分析源代碼得知具體傳入的類型。
第二種方式
可以先使用selenium完成一次登陸操作,然后通過驅(qū)動器調(diào)用get_cookies方法將獲取的cookie信息存儲到對應(yīng)的本地文件中,最后后續(xù)調(diào)用cookie信息即可。以CRM項目為實例。
# Get_Cookie.py from selenium import webdriver import json class GetCookie(object): def __init__(self): self.driver=webdriver.Chrome() self.driver.get("http://192.168.141.100/index.php/login") def login(self): self.driver.find_element_by_name("username").send_keys("admin") self.driver.find_element_by_name("userpwd").send_keys("admin888") self.driver.find_element_by_class_name("logindo").click() def get_cookie(self): with open("cookie.json",mode="w") as fp: for value in self.driver.get_cookies(): json.dump(value,fp) if __name__ == '__main__': get=GetCookie() #get.login() #get.get_cookie()
將登陸獲取到的cookie信息存儲到j(luò)son格式文件中。
然后不用輸入用戶名、密碼即可獲取登錄態(tài),
# Crm_NoLogin.py #通過cookie完成登陸操作,直接調(diào)用已經(jīng)保存好的cookie文件中的cookie內(nèi)容 from selenium import webdriver import json class CrmNoLogin(object): def __init__(self): self.driver=webdriver.Chrome() self.driver.get("http://123.57.71.195:7878/") #將之前保存的cookie進行添加到當前的會話中 self.driver.add_cookie(self.read_cookie()) #添加完后,則再次訪問獲取此url地址的話則可以直接處于登陸狀態(tài),此處注意,訪問的url必須是登陸成功后的url地址 self.driver.get("http://123.57.71.195:7878/") #聲明讀cookie的方法 def read_cookie(self): with open("cookie.json") as fp: return json.load(fp) if __name__ == '__main__': crm=CrmNoLogin()
注意:此處的crm項目并不是基于session會話鏈接的,所以第二次發(fā)送請求時不能夠刷新操作,否則無法處于登陸態(tài),必須重新發(fā)送一次登陸成功后的請求才能夠處于登陸狀態(tài)。這里就需要大家注意:刷新和重新發(fā)送請求的區(qū)別了。
總結(jié)
實踐:大家可以通過以上方法完成OA項目的免登陸操作哦,OA項目的訪問地址:http://123.57.71.195:9999/login.html,這是我給大家部署在阿里云上的項目,可以練習練習下哦~~
說明:
1.如果第一次訪問獲取的cookie存在多個字典的形式的話,則每個字典都需要保存到cookie文件中,然后進行讀取的時候需要遍歷每個字典,并使用add_cookie將每個字典進行添加對應(yīng)的cookie信息
2.refresh和重新發(fā)送請求的區(qū)別:刷新就是基于現(xiàn)有的頁面基礎(chǔ)上進行檢查當前頁面是否存更新的內(nèi)容;地址欄中的回車又分兩種情況:一種就是請求的url在瀏覽器中的緩存未過期;另一種就是已過期;建議后期如果是使用cookie完成免登陸狀態(tài)的話,大家如果不懂什么時候使用refresh的話,則全部實用重新發(fā)送請求;
到此這篇關(guān)于python使用cookie繞過驗證碼實現(xiàn)登錄示例代碼的文章就介紹到這了,更多相關(guān)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
django xadmin 管理器常用顯示設(shè)置方式
這篇文章主要介紹了django xadmin 管理器常用顯示設(shè)置方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03python3.6連接MySQL和表的創(chuàng)建與刪除實例代碼
這篇文章主要介紹了python3.6連接MySQL和表的創(chuàng)建與刪除實例代碼,具有一定借鑒價值,需要的朋友可以參考下2017-12-12使用pandas的DataFrame的plot方法繪制圖像的實例
今天小編就為大家分享一篇使用pandas的DataFrame的plot方法繪制圖像的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05