Selenium成長之路-23cookie的處理

cookie的處理,一部分是運用到爬蟲,另一部分是運用到登錄的驗證碼的獲取。

今天來看看webdriver對 cookie都有哪些神操作。

  • get_cookies() 獲取所有cookie信息;
  • get_cookie(name) 返回特定name有cookie信息;
  • add_cookie(cookie_dict) 添加cookie,必須有name和value值;
  • delete_cookie(name) 刪除特定部分的cookie信息;
  • delete_all_cookie() 刪除所有cookie信息。

知道了cookie 有這麼多神操作,那麼怎麼能抓取到cookie呢?

使用我們的神祕武器 "Fiddler"(Charles 也可以)。

Fiddler確實是一個十分牛叉的工具:可以抓包,可以測試接口(Web/APP),可以抓信息等, 

  >>> 這裏我就不延時Fiddler的用法了

我們上代碼,看看cookie到底有啥操作:

# -*- coding: utf-8 -*-
"""
@ auth : carl_DJ
@ time : 2020-5-22
"""

from selenium import webdriver

#不打開瀏覽器運行
option = webdriver.ChromeOptions()
option.add_argument('headless')
driver  = webdriver.Chrome(chrome_options=option)

url = "http://www.baidu.com"
driver.get(url)

#獲取cookie
cookie= driver.get_cookies()
#打印cookie
print(cookie)

#退出瀏覽器
driver.quit

打印的結果如下:

  

[{'domain': '.baidu.com', 'httpOnly': False, 'name': 'H_PS_PSSID', 'path': '/', 'secure': False, 'value': '31355_1449_31670_21120_31110_31596_30842_31464_31322_30823'}, {'domain': '.baidu.com', 'expiry': 1621646261.050973, 'httpOnly': False, 'name': 'BAIDUID', 'path': '/', 'secure': False, 'value': '8DDCEC4A62A0DE72D84C5A02861269B2:FG=1'}, {'domain': '.baidu.com', 'expiry': 3737593908.050941, 'httpOnly': False, 'name': 'BIDUPSID', 'path': '/', 'secure': False, 'value': '8DDCEC4A62A0DE7242C056D21382AE78'}, {'domain': '.baidu.com', 'expiry': 3737593908.050959, 'httpOnly': False, 'name': 'PSTM', 'path': '/', 'secure': False, 'value': '1590110259'}, {'domain': 'www.baidu.com', 'expiry': 1590974262, 'httpOnly': False, 'name': 'BD_UPN', 'path': '/', 'secure': False, 'value': '12314753'}, {'domain': 'www.baidu.com', 'httpOnly': False, 'name': 'BD_HOME', 'path': '/', 'secure': False, 'value': '1'}]

是不是很亂,因爲所有的信息都打印出來了,那麼我們只想要幾個的信息怎麼辦,有辦法的,看下面的代碼:

 

.....

#向cookie添加信息
driver.add_cookie({"name":"abc123456","value":"value123456"})

#遍歷cookies中的name和value信息,並打印
for cookie in driver.get_cookies():
    print("%s -> %s" % (cookie['name'], cookie['value']))

#刪除cookie#

##刪除一個指定的cookie
driver.delete_cookie("CookieName")

##刪除所有cookie信息
driver.delete_all_cookies()

#退出瀏覽器
driver.quit()

打印結果如下:

abc123456 -> value123456
H_PS_PSSID -> 31351_1445_31669_21078_31594_31270_31464_30823
BAIDUID -> 185872EDC7B507D5EBF82AD614049B02:FG=1
BIDUPSID -> 185872EDC7B507D50824068F1F271AD8
PSTM -> 1590111110
BD_UPN -> 12314753
BD_HOME -> 1

 

是不是很簡單。

在實際項目中,我們驗證cookie方法有三種: 

   ①獲取真的 cookie信息,然後填寫;

   ②開發寫一個萬能驗證碼,隨便填寫cookie信息;

   ③不填寫cookie信息,跳過。

>>>安全性最高的,肯定是第一種,當然,也是最麻煩的了。沒辦法,魚與熊掌不能兼得。

舉個例子,我們來整一個登錄操作

from selenium import webdriver
from selenium.webdriver.common.by import By
import  os,time


#不打開瀏覽器運行
option = webdriver.ChromeOptions()
option.add_argument('headless')
driver  = webdriver.Chrome(chrome_options=option)

url = "http://項目地址"
driver.get(url)

#填寫登錄名和密碼
driver.find_element(By.ID,"usn").send_keys("username")
driver.find_element(By.ID,"pwd").send_keys("password")

# #獲取cookie
cookies =driver.get_cookies()
# #遍歷cookies中的信息,並打印
for  cookie in cookies:
    print(cookie)

#添加cookie
driver.add_cookie({"name":"abc123456","value":"value123456"})

#點擊登錄按鈕
driver.find_element(By.ID,"login").click()

#刷新頁面
driver.refresh()
time.sleep(3)

#退出
driver.quit()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章