selenium 添加cookie和token


1、WebDriver相關的Cookies操作

  • get_cookies(): 獲取當前會話中當前域名所有cookies
  • get_cookie(name): 獲取當前會話中當前域名指定name對應的cookie值
  • delete_cookie(name): 刪除指定cookie
  • delete_all_cookies(): 刪除所有cookie
  • add_cookie(self, cookie_dict): 添加cookie

  1.1、添加Cookie時需要逐條添加,cookie_dict示例:

  • 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})"

2、如何添加cookie實現繞過登錄

以百度為例

  1. 我們先登錄百度為例,通過F12查看應用程序(Application),BDUSS就是cookie。
 

 

 

從圖中可以找出:name= "BDUSS",value = "3R-T21PamZseEJmLVlmQ1ZNS2ZRQ3VPeUJE"

構造cookie字典

cookie = {'name' : 'BDUSS', 'value' : '3R-T21PamZseEJmLVlmQ1ZNS2ZRQ3VPeUJEVUtXUE**'}

然后調用:driver.add_cookie(cookie_dict=cookie)

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.maximize_window()
time.sleep(1)
cookie = {"name":"BDUSS", "value":"3R-T21PamZseEJmLVlmQ1ZNS2ZRQ3VPeUJEVUtXUEoxUkx2ODVTZ1REZmczOVZmSVFBQUFBJCQAAAAAAAAAAAEAAAA1p7iuyeTI1WluZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOBSrl~gUq5fb"}


driver.add_cookie(cookie_dict=cookie)
driver.get("https://www.baidu.com/")

time.sleep(10)
driver.quit()

 

Traceback (most recent call last):

File "I:/python/softwaredate/py_basics/1****/14 selenium cookie繞過登錄.py", line 10, in <module>
​ driver.add_cookie(cookie_dict=cookie)
File "D:\software\python38\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 894, in add_cookie
​ self.execute(Command.ADD_COOKIE, {'cookie': cookie_dict})
File "D:\software\python38\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
​ self.error_handler.check_response(response)
File "D:\software\python38\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
​ raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.InvalidCookieDomainException: Message: invalid cookie domain
(Session info: chrome=85.0.4183.102)**

 

如發現如上報錯怎么解決呢:
只需要在添加cookie上方增加一個打開網頁的地址即可

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.maximize_window()
time.sleep(1)
cookie = {"name":"BDUSS", "value":"3R-T21PamZseEJmLVlmQ1ZNS2ZRQ3VPeUJEVUtXUEoxUkx2ODVTZ1REZmczOVZmSVFBQUFBJCQAAAAAAAAAAAEAAAA1p7iuyeTI1WluZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOBSrl~gUq5fb"}

driver.get("https://www.baidu.com/")  #添加這一行即可
driver.add_cookie(cookie_dict=cookie)
driver.get("https://www.baidu.com/")

time.sleep(10)
driver.quit()

 

上面的方式就可以實現繞過登錄,不過這要注意以下兩點:

  • 生成 cookie 的賬號不能有退出操作,否則 cookie 會失效。
  • 注意 cookie 的有效期(Expires/Max-Age列),可能需要定時更新 cookie

3、接口登錄獲取cookie,構造成cookie_dict添加到add_cookie

import requests
from selenium import webdriver
from time import sleep

def get_cookie(username, password):
    login_url = 'http://****/newecshop/admin/privilege.php'
    data = dict(username=username,password=password, act='signin')
    res = requests.post(login_url, data=data, allow_redirects=False)
    esscp_id = res.cookies.get('ECSCP_ID')
    cookie = dict(name='ECSCP_ID',value=esscp_id)
    return cookie

admin_url = 'http://****/newecshop/admin/index.php'

driver = webdriver.Chrome()
driver.get(admin_url)  
cookie = get_cookie(****, ****)
driver.add_cookie(cookie)
driver.get('http://***/newecshop/admin/order.php?act=list')

sleep(3)
driver.quit()

 

4、 啟動 Chrome 瀏覽器繞過登錄

我們每次打開瀏覽器做相應操作時,對應的緩存和 cookie 會保存到瀏覽器默認的路徑下,我們先查看個人資料路徑,以 chrome 為例,我們在地址欄輸入chrome://version/

 

 

 

 

圖中的個人資料路徑就是我們需要的,我們去掉后面的 \Default,然后在路徑前加上「–user-data-dir=」就拼接出我們要的路徑了。

profile_directory = r'--user-data-dir=C:\Users\xxx\AppData\Local\Google\Chrome\User Data'

 

接下來,我們啟動瀏覽器的時候采用帶選項時的啟動,這種方式啟動瀏覽器需要注意,運行代碼前需要關閉所有的正在運行 chrome 程序,不然會報錯。全部代碼如下。

from selenium import webdriver
import time
import os,platform
if platform.system() =="Windows":
    os.system("taskkill -im chrome* -f")  # 把chrome開頭的進程都殺掉
else:
    os.system("killall -9 chrome*")
# 獲取用戶目錄
my_dir = os.path.expanduser("~")

profile_directory = r'--user-data-dir={}\AppData\Local\Google\Chrome\User Data'.format(my_dir)
print(profile_directory)
option = webdriver.ChromeOptions()
option.add_argument(profile_directory)

driver = webdriver.Chrome(chrome_options=option)
driver.get("https://www.baidu.com/")
time.sleep(2)

 

selenium 自動化啟動瀏覽器后我們會發現我之前保存的書簽完整在瀏覽器上方,baidu 賬號也是登錄的狀態。

 

 

 

 

5、繞過圖形驗證碼的網站

文中第一個圖是簡書登錄時的圖形驗證碼,我們登錄簡書后(cookie 有一定的時效,貌似有 10 天半個月左右),把上面代碼中的鏈接換成簡書的,再用上面的方法覺可以實現繞過登錄頁的圖形驗證碼。



原文鏈接:
鏈接:https://www.jianshu.com/p/d442a3cbef3a


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM