Selenium-百度賬號 免登入的實現 cookie處理
場景:
經常會遇到登入需要驗證碼這樣類似的情況
解決方案:
1.萬能驗證碼
2.利用cookies來實現,問開發哪個cookies值是登入後需要的,把這個值帶上即可
3.利用火狐瀏覽器的profile檔案來實現(首先需要手工登入一次,且勾選記住資訊)
4.手工輸入(需要輸入的地方sleep一會)
例項一:
利用cookies登入百度帳號
1\獲取到cookies,取得登入的cookie
cookies = driver.get_cookies()
2\新增cookies,登入帳號
driver.add_cookie(cookie值)
獲取到cookies值
import requests from selenium import webdriver import time from selenium.webdriver.common.by import By # 準備弄一個 def main(): # ! /usr/bin/env python # coding=utf-8 from selenium import webdriver import time driver = webdriver.Chrome() driver.get("https://www.baidu.com/") time.sleep(3) driver.find_element_by_link_text( '登入').click() time.sleep(3) driver.find_element_by_id( 'TANGRAM__PSP_10__footerULoginBtn').click() time.sleep(3) # 輸入賬號和密碼 driver.find_element_by_name( "userName").send_keys("dasdas") driver.find_element_by_name("password").send_keys("passwprd") time.sleep(20) # 手動輸入驗證碼 driver.find_element("id", "TANGRAM__PSP_10__submit").click() time.sleep(5) # 獲取cookies值 cookies = driver.get_cookies() print(cookies) driver.quit() pass if __name__ == '__main__': main()
結果:
[ {'value': '828211617093E523BC5EDFE05AB3EA39:FG=1', 'expiry': 3651917680, 'path': '/', 'name': 'BAIDUID', 'httpOnly': False, 'secure': False, 'domain': '.baidu.com'}, {'value': '828211617093E523BC5EDFE05AB3EA39', 'expiry': 3651917680, 'path': '/', 'name': 'BIDUPSID', 'httpOnly': False, 'secure': False, 'domain': '.baidu.com'}, {'value': '1504433526', 'expiry': 3651917680, 'path': '/', 'name': 'PSTM', 'httpOnly': False, 'secure': False, 'domain': '.baidu.com'}, {'value': 'B490B5EBF6F3CD402E515D22BCDA1598', 'expiry': 1504520438, 'path': '/', 'name': 'BDORZ', 'httpOnly': False, 'secure': False, 'domain': '.baidu.com'}, {'value': 'eee17f0ccd81747c87f3b9e5f43712eb', 'expiry': 2556057600, 'path': '/', 'name': 'FP_UID', 'httpOnly': False, 'secure': False, 'domain': '.baidu.com'}, {'value': 'N2YTVzQX5aTWl4THpFWGhOMFp4VDk2T1MyQ0Z5bWRwRDMtcnhSN0lkQ1pZdE5aSVFBQUFBJCQAAAAAAAAAAAEAAAC~pSxhu-HF3LXE0NwyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJnVq1mZ1atZdk', 'expiry': 1763634068, 'path': '/', 'name': 'BDUSS', 'httpOnly': True, 'secure': False, 'domain': '.baidu.com'}, {'value': '1', 'expiry': None, 'path': '/', 'name': 'BD_HOME', 'httpOnly': False, 'secure': False, 'domain': 'www.baidu.com'}, {'value': '1439_12897_21089_22160', 'expiry': None, 'path': '/', 'name': 'H_PS_PSSID', 'httpOnly': False, 'secure': False, 'domain': '.baidu.com'}, {'value': '13314352', 'expiry': 1505298070, 'path': '/', 'name': 'BD_UPN', 'httpOnly': False, 'secure': False, 'domain': 'www.baidu.com'}, {'value': '1', 'expiry': 2450514070, 'path': '/', 'name': 'sugstore', 'httpOnly': False, 'secure': False, 'domain': '.www.baidu.com'} ]
剩下的如何取到登入的cookie,需要自己去嘗試,如果是開發中,就去問開發就行,更方便
利用cookie值,登入百度帳號
#! /usr/bin/env python #coding=utf-8 from selenium import webdriver import time ''' 利用cookies值登入百度 {'value': 'N2YTVzQX5aTWl4THpFWGhOMFp4VDk2T1MyQ0Z5bWRwRDMtcnhSN0lkQ1pZdE5aSVFBQUFBJCQAAAAAAAAAAAEAAAC~pSxhu-HF3LXE0NwyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJnVq1mZ1atZdk', 'expiry': 1763634068, 'path': '/', 'name': 'BDUSS', 'httpOnly': True, 'secure': False, 'domain': '.baidu.com'} ''' driver = webdriver.Firefox() driver.get("https://www.baidu.com/") time.sleep(3) #設定cookies值,基本格式 c1 = {'value': 'N2YTVzQX5aTWl4THpFWGhOMFp4VDk2T1MyQ0Z5bWRwRDMtcnhSN0lkQ1pZdE5aSVFBQUFBJCQAAAAAAAAAAAEAAAC~pSxhu-HF3LXE0NwyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJnVq1mZ1atZdk', 'expiry': 1763634068, 'path': '/', 'name': 'BDUSS', 'httpOnly': True, 'secure': False, 'domain': '.baidu.com'} #新增cookies driver.add_cookie(c1) time.sleep(3) #重新整理之後觀察是否已經登入成功 driver.refresh() time.sleep(5) driver.quit()
結果:
例項二:利用火狐瀏覽器的profile檔案來實現(首先需要手工登入一次,且勾選記住資訊),登入百度帳號
#! /usr/bin/env python #coding=utf-8 from selenium import webdriver import time ''' 自己的火狐瀏覽器的profile檔案路徑檢視方法 火狐瀏覽器-幫助-故障排除資訊-顯示資料夾 必須手工登入一次,並記住密碼之後再執行此程式碼才可以 ''' profile_ff = "C:/Users/Administrator/AppData/Roaming/Mozilla/Firefox/Profiles/2e4p97lg.default" fp = webdriver.FirefoxProfile(profile_ff) driver = webdriver.Firefox(fp) driver.get("https://www.baidu.com/") time.sleep(5) driver.quit()
也可以實現免登入