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實現繞過登錄
以百度為例
- 我們先登錄百度為例,通過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