国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

利用selenium 3.7和python3添加cookie模擬登陸的實現

2020-01-04 16:19:52
字體:
來源:轉載
供稿:網友

前言

隨著Python3的普及,Selenium3也跟上了行程。而Selenium3最大的變化是去掉了Selenium RC,另外就是Webdriver從各自瀏覽器中脫離,必須單獨下載。本文就來介紹了關于selenium 3.7+python/120403.html">python3實現添加cookie模擬登陸的相關內容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。

一、背景介紹

最近做一個爬蟲項目,用selenium調用瀏覽器去獲取渲染后的源碼,但是每次登陸都需要手機驗證,這真的是頭痛啊,這種驗證方式不要想著去破解,還是老老實實用手機收驗證碼去吧!反正我是不知道這種驗證方式還能破解!難道就沒有其他辦法了嗎?

有,那就是模擬登陸!這樣最起碼不用沒測試一次就登陸驗證一次。

這里要說一下的就是,網上很多關于webdriver 添加cookie的教程,基本百分之80都是有問題的。反正我是找了N多的帖子都沒有一個是正確的。

二、  添加cookie方法:driver.add_cookie()

1.add_cookie(cookie_dict)方法里面參數是cookie_dict,說明里面參數是字典類型。

2.add_cookie源碼。

python,selenium,登陸,模擬cookie,添加cookie

從源碼中我們可以看出,add_cookie方法接受一個字典,字典中包含name,value,path,domain,secure,expiry,但是這個源碼容易誤導人,那就是cookie參數沒有給全。

網上很多教程給的代碼cookie參數是沒給夠的,根本就跑不起來。

3. add_cookie接收的字典格式。 

正確的格式:

cookie = { # "domain": ".58.com", #Firefox瀏覽器不能寫domain,如果寫了會報錯,谷歌需要寫否則也是報錯,這里就是一個坑。其他瀏覽器沒測試不知道情況。 'name': name, 'value': value, "expires": "", 'path': '/', 'httpOnly': False, 'HostOnly': False, 'Secure': False,}
  • name:cookie的名稱
  • value:cookie對應的值,動態生成的
  • domain:服務器域名
  • expiry:Cookie有效終止日期
  • path:Path屬性定義了Web服務器上哪些路徑下的頁面可獲取服務器設置的Cookie
  • httpOnly:防腳本攻擊
  • secure:在Cookie中標記該變量,表明只有當瀏覽器和Web Server之間的通信協議為加密認證協議時

為什么要構造成這樣子,其實我們看下瀏覽器保存的cookie格式就明白了。下圖就是谷歌瀏覽器的cookie 的截圖。

python,selenium,登陸,模擬cookie,添加cookie

三 ,我們舉個例子看下是否真的寫成功了:

python,selenium,登陸,模擬cookie,添加cookie

 第一次訪問的的時候去獲取名字叫hello的cookie 是沒有的,add_cookie后再去訪問,第二次訪問就拿到了hello。說明已經寫進去了。

 四、項目實戰。

能不能用?好不好用?怎么用?,用項目來說話,模擬登陸百度。!

目標:

  1.手動登錄一次后,只要在cookie 有效期內無需重復登錄。

  2.訪問瀏覽記錄。

示例代碼

#!coding=utf-8import timefrom selenium import webdriverimport pickle class BaiduSpider(object): def __init__(self,username,password):  self.username = username  self.password = password  self.driver = webdriver.Chrome()  self.driver.get(url='http://www.baidu.com')  self.set_cookie()  self.is_login() def is_login(self):  '''判斷當前是否登陸'''  self.driver.refresh()  html = self.driver.page_source  if html.find(self.username) == -1: #利用用戶名判斷是否登陸   # 沒登錄 ,則手動登錄   self.login()  else:   #已經登錄 嘗試訪問搜索記錄,可以正常訪問   self.driver.get(url='http://i.baidu.com/my/history')   time.sleep(30) # 延時看效果  def login(self):  '''登陸'''  time.sleep(60) #等待手動登錄  self.driver.refresh()  self.save_cookie()  def save_cookie(self):  '''保存cookie'''  # 將cookie序列化保存下來  pickle.dump(self.driver.get_cookies(), open("cookies.pkl", "wb"))  def set_cookie(self):  '''往瀏覽器添加cookie'''  '''利用pickle序列化后的cookie'''  try:   cookies = pickle.load(open("cookies.pkl", "rb"))   for cookie in cookies:    cookie_dict = {     "domain": ".baidu.com", # 火狐瀏覽器不用填寫,谷歌要需要     'name': cookie.get('name'),     'value': cookie.get('value'),     "expires": "",     'path': '/',     'httpOnly': False,     'HostOnly': False,     'Secure': False}    self.driver.add_cookie(cookie_dict)  except Exception as e:   print(e)  if __name__ == '__main__':  BaiduSpider('usename','!!!!') # 你的百度賬號,密碼

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平定县| 应用必备| 兰溪市| 光山县| 金门县| 深圳市| 砀山县| 塘沽区| 古蔺县| 堆龙德庆县| 广德县| 定结县| 香格里拉县| 兰溪市| 南宫市| 奉化市| 紫金县| 旬邑县| 大悟县| 博野县| 张家界市| 龙口市| 阳东县| 兰州市| 上高县| 云霄县| 方正县| 林芝县| 沾益县| 老河口市| 舟山市| 江油市| 安庆市| 辽阳县| 会宁县| 方正县| 乌兰浩特市| 寻乌县| 靖江市| 太保市| 扶沟县|