Python3+selenium實現cookie免密登入的示例程式碼
阿新 • • 發佈:2020-03-20
進過兩天的研究終於實現了cookie的免密登入,其實就是session。特別開心,因為在Python爬蟲群裡問那些大佬,可是他們的回答令我寒心,自己琢磨!!!
靠誰比如靠自己,為此我總結下經驗,以免入門的小白再次踩這樣的吭。其實網上很多部落格寫的都比較不詳細甚
首先問題自己思考,不懂得去群裡問問,然後最重要的要理解事物的本質,只有理解後才能運用它;最後在百度一下把所有相關的部落格都點開,一條一條的看一遍總結下規律,比較嘍的就捨棄,這樣基本上都能得到啟發作用。比如selenium的本質就是操作瀏覽器的,那麼操作cookie也是操作瀏覽器的,並且用selenium開啟瀏覽器時什麼都沒有,如果進入某個網站就會生成cookie先關資訊。等待,那麼我們可以用selenium開啟網站之後讓他清除所有cookie避免干擾,然後睡眠20秒以便等我們登陸,這是就會產生cookie,我們將它獲取下來就可以實現登陸了。
下面直接上程式碼:
# 登入 def login_jd(): # 登入前清除所有cookie browser.get('https://www.baidu.com/') browser.delete_all_cookies() # 列印登入前的cookie cookieBefore = browser.get_cookies() print(cookieBefore) print("------------------------------------------------------------------------") time.sleep(2) list_cookies = [ {'domain': '.baidu.com','httpOnly': False,'name': 'H_PS_PSSID','path': '/','secure': False,'value': '1420_21120_29074_29237_2518_2909_29134_2832_28585_26350_2913'},{'domain': '.baidu.com','expiry': 159184274.325927,'name': 'BAIDUID','value': 'FF789623EA1785FF0D55ED0401D057B2:FG=1'},{'domain': 'www.baidu.com','expiry': 1563289,'name': 'BD_UPN','value': '123143'},'expiry': 1560354688.892916,'name': 'BDORZ','value': 'B490B5BF6F3CD40255D22BCDA1598'},'expiry': 1819468287.471656,'httpOnly': True,'name': 'BDUSS','value': 'tGem1JzblNpOa1VVek0yLThmbWR6RxENWZtcVNwUThpT2hCLTVsUFBQUFBJCQAAAAAAAAAAAEAAAA4MdBAd3d3d2dnZ2dnZWVlZWUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALkI~1y5CP9cVm'},'expiry': 2569420288,'name': 'BIDUPSID','value': '587A2695FCD6D043A5FE5139E4F'},'expiry': 3707755.819949,'name': 'PSTM','value': '156027786'},'name': 'BD_HOME','value': '1'} ] # 獲取之後的cookie cookies = browser.get_cookies() print(browser.get_cookies()) # 將獲取的的所有cookies新增到瀏覽器 for cookie in list_cookies: browser.add_cookie(cookie) print(cookie) time.sleep(2) # 重新整理頁面即可更新cookie browser.refresh() time.sleep(505) browser.quit()
示例二:
首先使用使用者名稱和賬號,登入獲取cookie
import json import time from selenium.webdriver.chrome.options import Options from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from selenium.common.exceptions import NoSuchElementException class Crawler(): def gather(): chrome_options = Options() chrome_options.add_argument("window-size=1024,768") driver = webdriver.Chrome(chrome_options=chrome_options,executable_path='C:\devtool\Anaconda\Scripts\chromedriver') wait = WebDriverWait(driver,1) ##登入百度知道 logurl = 'https://zhidao.baidu.com/' #登入前清楚所有cookie driver.delete_all_cookies() driver.get(logurl) ##登入前列印cookie print(driver.get_cookies()) ##點選登入按鈕 driver.find_element_by_xpath('//*[@id="userbar-login"]').click() # driver.find_element_by_id("userbar-login").click() time.sleep(2) ##首次嘗試的 預設進入掃碼登入的介面 try: footerULoginBtn = driver.find_element_by_xpath('//*[@id="TANGRAM__PSP_10__footerULoginBtn"]') footerULoginBtn.click() #切換到使用者名稱和密碼登入 footerULoginBtn_not_exist = False except: footerULoginBtn_not_exist = True ## 使用者名稱跟密碼的設定並點選提交 user = driver.find_element_by_name('userName') user.clear() pwd = driver.find_element_by_name('password') pwd.clear() submit = driver.find_element_by_id('TANGRAM__PSP_10__submit') time.sleep(2) user.send_keys('使用者名稱') pwd.send_keys('密碼') time.sleep(1) submit.click() time.sleep(1) ## 傳送手機驗證碼 驗證 ##點擊發送按鈕 ###是否需要輸入手機驗證碼 try: driver.find_element_by_xpath('//*[@id="TANGRAM__28__button_send_mobile"]').click() time.sleep(10) ##使用shell互動式,接受驗證碼 message = input("Tell me the captcha: ") ##輸入驗證碼 captcha = driver.find_element_by_xpath('//*[@id="TANGRAM__28__input_label_vcode"]') time.sleep(1) captcha.send_keys(message) time.sleep(1) ##點選提交 driver.find_element_by_xpath('//*[@id="TANGRAM__28__button_submit"]').click() time.sleep(3) except: time.sleep(1) ### 獲取cookie cookie = driver.get_cookies() print(cookie) jsonCookies = json.dumps(cookie) with open('vcyber.json','w') as f: f.write(jsonCookies) time.sleep(30) Crawler.gather()
獲取cookie後,可以不用輸入密碼登入
import json import time from selenium.webdriver.chrome.options import Options from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from selenium.common.exceptions import NoSuchElementException class Crawler(): def gather(): chrome_options = Options() chrome_options.add_argument("window-size=1024,1) ##登入百度知道 logurl = 'https://zhidao.baidu.com/' #登入前清楚所有cookie driver.delete_all_cookies() driver.get(logurl) f1 = open('vcyber.json') cookie = f1.read() cookie = json.loads(cookie) for c in cookie: driver.add_cookie(c) # # 重新整理頁面 driver.refresh() Crawler.gather()
到此這篇關於Python3+selenium實現cookie免密登入的示例程式碼的文章就介紹到這了,更多相關selenium cookie免密登入內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!