亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Selenium webdriver添加cookie實(shí)現(xiàn)過程詳解

 更新時(shí)間:2020年08月12日 09:29:03   作者:孫大花  
這篇文章主要介紹了Selenium webdriver添加cookie實(shí)現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

一. webdriver中常用的cookie方法

webdriver中提供了操作cookie的相關(guān)方法:

  • get_cookies()    獲得cookie信息
  • add_cookie(cookie_dict) 添加cookie
  • delete_cookie(name) 刪除特定(部分)的cookie
  • delete_all_cookies() 刪除所有的cookie

二. add_cookie()的用法

1. 源碼中的解釋

源碼中簡(jiǎn)略的向我們展示了如何添加cookie,源碼如下:

def add_cookie(self, cookie_dict):
    """
    Adds a cookie to your current session.

    :Args:
     - cookie_dict: A dictionary object, with required keys - "name" and "value";
      optional keys - "path", "domain", "secure", "expiry"

    Usage:
      driver.add_cookie({'name' : 'foo', 'value' : 'bar'})
      driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/'})
      driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/', 'secure':True})

    """
    self.execute(Command.ADD_COOKIE, {'cookie': cookie_dict})

從中可以看出add_cookie()這個(gè)函數(shù)有一個(gè)參數(shù)cookie_dict,它是以字典的形式傳入的,字典中必選的鍵是"name"和"value",可選的鍵是"path", "domin", "secure", "expiry",其實(shí)源碼中還漏了一個(gè):"httponly"

2. cookie中鍵名的含義

  • name:cookie的名稱
  • value:cookie對(duì)應(yīng)的值,動(dòng)態(tài)生成的
  • domain:服務(wù)器域名
  • expiry:Cookie有效終止日期
  • path:Path屬性定義了Web服務(wù)器上哪些路徑下的頁面可獲取服務(wù)器設(shè)置的Cookie
  • httpOnly:防腳本攻擊
  • secure:在Cookie中標(biāo)記該變量,表明只有當(dāng)瀏覽器和Web Server之間的通信協(xié)議為加密認(rèn)證協(xié)議時(shí)

三. 實(shí)例

第一步:我們先手工做一次登錄,打開chrome的調(diào)試工具(F12),選擇Network—Preserve log—XHR

第二步:點(diǎn)擊登錄,打開調(diào)試工具中的login,可以看到右邊Response Headers下面就出現(xiàn)了服務(wù)器返回給瀏覽器的cookie

第三步:python代碼的實(shí)現(xiàn),最容易出現(xiàn)問題的可能是這一步

from selenium import webdriver

driver = webdriver.Chrome()
cookies = {'value': 'think%3A%7B%22username%210293%31628193MDAwMDAwMLOGpZaIudFqhc6Gl7LQetmZtmfOk2RhbQ%22%2C%22expire%sfdaaswMDAwMDAwMLOGud6Gqb-whbiCmLOmdZ4%22%2C%22token%22%3A%22MDAwMDAwMDAwMMurrpWavLehhs1-3LLfgduEt4OWepuo123456123KZq6HQxtOK0ZCme5p-q6iZu2yrn4uNhJ3KedDYk7ivboS4it6910926YW0%22%7D',
      'name': 'ketangpai_home_remember'}

driver.add_cookie(cookie_dict=cookies)
driver.get(https://www.ketangpai.com/Main/index.html)

運(yùn)行結(jié)果后發(fā)現(xiàn)報(bào)錯(cuò)了:Message: unable to set cookie

Traceback (most recent call last):
 File "D:/python_workshop/python6/selenium_webdriver/add_cookies的使用(二).py", line 9, in <module>
  driver.add_cookie(cookie_dict=cookies)
 File "D:\Program\python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 872, in add_cookie
  self.execute(Command.ADD_COOKIE, {'cookie': cookie_dict})
 File "D:\Program\python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 312, in execute
  self.error_handler.check_response(response)
 File "D:\Program\python34\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
  raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unable to set cookie
 (Session info: chrome=66.0.3359.139)
 (Driver info: chromedriver=2.35.528161 (5b82f2d2aae0ca24b877009200ced9065a772e73),platform=Windows NT 6.1.7600 x86_64)

第四步:修改代碼,解決問題

"技術(shù)提示:必須首先加載網(wǎng)站,這樣Selenium 才能知道cookie 屬于哪個(gè)網(wǎng)站,即使加載網(wǎng)站的行為對(duì)我們沒任何用處"

只需要給原來的代碼加上一句(紅色部分),這個(gè)url填"https://www.ketangpai.com/User/login.html"或"https://www.ketangpai.com/Main/index.html"都行,只要是同一個(gè)domain就行,瀏覽器會(huì)自動(dòng)跳轉(zhuǎn)到登錄頁面:

from selenium import webdriver

driver = webdriver.Chrome()
cookies = {'value': 'think%3A%7B%22username%210293%31628193MDAwMDAwMLOGpZaIudFqhc6Gl7LQetmZtmfOk2RhbQ%22%2C%22expire%sfdaaswMDAwMDAwMLOGud6Gqb-whbiCmLOmdZ4%22%2C%22token%22%3A%22MDAwMDAwMDAwMMurrpWavLehhs1-3LLfgduEt4OWepuo123456123KZq6HQxtOK0ZCme5p-q6iZu2yrn4uNhJ3KedDYk7ivboS4it6910926YW0%22%7D',
      'name': 'ketangpai_home_remember'}

driver.get("https://www.ketangpai.com/User/login.html")
driver.add_cookie(cookie_dict=cookies)
driver.get(https://www.ketangpai.com/Main/index.html)

再次運(yùn)行,發(fā)現(xiàn)已經(jīng)成功了

四. 獲取cookie的方法不止一種

cookie的可以通過瀏覽器調(diào)試來獲取,當(dāng)然也可以通過抓包工具獲取,那么能不能用代碼來獲取呢?答案是肯定的

參照上面那篇博文,我們完成以下代碼,第一次通過driver1發(fā)送用戶名和密碼登錄,獲取cookie并保存,第二次driver2添加driver1保存的cookie,達(dá)到繞過登錄的目錄

from selenium import webdriver
import time

#driver1登錄網(wǎng)站,獲得cookie并保存
driver1 = webdriver.Chrome()
driver1.get("https://www.ketangpai.com/User/login.html")
driver1.maximize_window()
time.sleep(2)

#第一次通過send_keys向輸入框發(fā)送用戶名密碼登錄
driver1.find_element_by_xpath("http://input[@name='account']").send_keys("your username")
driver1.find_element_by_xpath("http://input[@name='pass']").send_keys("your password")
time.sleep(2)
driver1.find_element_by_xpath("http://div[@class='padding-cont pt-login']//a[@class='auto-login fl']").click()
time.sleep(3)
driver1.find_element_by_xpath("http://div[@class='padding-cont pt-login']//a[@class='btn-btn']").click()
time.sleep(6)
#用get_cookies的方法得到登錄后的cookie,這個(gè)cookie是個(gè)列表,列表中兩個(gè)元素都是字典,第一個(gè)是登錄前的cookie,第二個(gè)是登錄后的cookie
#將cookie保存在變量savedCookies中
savedCookies = driver1.get_cookies()
print(savedCookies)

#driver2得到driver1的cookie,先刪除自己的所有cookie,再將driver1的cookie添加進(jìn)來
driver2 = webdriver.Chrome()
#必須首先加載網(wǎng)站,這樣selenium才知道cookie是屬于哪個(gè)網(wǎng)站的
driver2.get("https://www.ketangpai.com/User/login.html")
#一旦加載網(wǎng)站,即使沒登錄,也會(huì)產(chǎn)生一個(gè)cookie,所以這個(gè)cookie被刪除了
driver2.delete_all_cookies()
#遍歷savedCookies中的兩個(gè)元素
for cookie in savedCookies:
  #k代表著add_cookie的參數(shù)cookie_dict中的鍵名,這次我們要傳入這5個(gè)鍵
  for k in {'name', 'value', 'domain', 'path', 'expiry'}:
    #cookie.keys()屬于'dict_keys'類,通過list將它轉(zhuǎn)化為列表
    if k not in list(cookie.keys()):
      #saveCookies中的第一個(gè)元素,由于記錄的是登錄前的狀態(tài),所以它沒有'expiry'的鍵名,我們給它增加
      if k == 'expiry':
        t = time.time()
        cookie[k] = int(t)  #時(shí)間戳s
  #將每一次遍歷的cookie中的這五個(gè)鍵名和鍵值添加到cookie
  driver2.add_cookie({k: cookie[k] for k in {'name', 'value', 'domain', 'path', 'expiry'}})

#加載我們想要看到的頁面的url
driver2.get("https://www.ketangpai.com/Main/index.html")
#再次打印driver2的cookie
print(driver2.get_cookies())

注意:cookie有兩種,一種是會(huì)話級(jí)別的,一種是有有效期的,會(huì)話級(jí)別的cookie就不能用add_cookie的方法了,因?yàn)橐淮螘?huì)話過程(從打開瀏覽器到關(guān)閉瀏覽器,斷開連接)結(jié)束后它就失效了

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python讀csv文件去掉一列后再寫入新的文件實(shí)例

    Python讀csv文件去掉一列后再寫入新的文件實(shí)例

    下面小編就為大家分享一篇Python讀csv文件去掉一列后再寫入新的文件實(shí)例,具有很的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • 基于python歷史天氣采集的分析

    基于python歷史天氣采集的分析

    今天小編就為大家分享一篇基于python歷史天氣采集的分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • python?include標(biāo)簽的使用方式及說明

    python?include標(biāo)簽的使用方式及說明

    這篇文章主要介紹了python?include標(biāo)簽的使用方式及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Python中sorted()函數(shù)的強(qiáng)大排序技術(shù)實(shí)例探索

    Python中sorted()函數(shù)的強(qiáng)大排序技術(shù)實(shí)例探索

    排序在編程中是一個(gè)基本且重要的操作,而Python的sorted()函數(shù)則為我們提供了強(qiáng)大的排序能力,在本篇文章中,我們將深入研究不同排序算法、sorted()?函數(shù)的靈活性,以及各種排序場(chǎng)景下的最佳實(shí)踐
    2024-01-01
  • Django靜態(tài)文件配置request對(duì)象方法ORM操作講解

    Django靜態(tài)文件配置request對(duì)象方法ORM操作講解

    這篇文章主要為大家介紹了Django靜態(tài)文件配置request對(duì)象方法ORM操作,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Python Gitlab Api 使用方法

    Python Gitlab Api 使用方法

    今天小編就為大家分享一篇Python Gitlab Api 使用方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • 使用 django orm 寫 exists 條件過濾實(shí)例

    使用 django orm 寫 exists 條件過濾實(shí)例

    這篇文章主要介紹了使用 django orm 寫 exists 條件過濾實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python開發(fā)裝包八種方法詳解

    Python開發(fā)裝包八種方法詳解

    這篇文章主要為大家介紹了Python開發(fā)中裝包的八種方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-10-10
  • 用Python實(shí)現(xiàn)數(shù)據(jù)篩選與匹配實(shí)例

    用Python實(shí)現(xiàn)數(shù)據(jù)篩選與匹配實(shí)例

    大家好,本篇文章主要講的是用Python實(shí)現(xiàn)數(shù)據(jù)篩選與匹配實(shí)例,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • python中urllib模塊用法實(shí)例詳解

    python中urllib模塊用法實(shí)例詳解

    這篇文章主要介紹了python中urllib模塊用法,以實(shí)例形式詳細(xì)分析了python中urllib模塊代替PHP的curl操作方法,具有不錯(cuò)的借鑒價(jià)值,需要的朋友可以參考下
    2014-11-11

最新評(píng)論