180 votes

Comment enregistrer et charger des cookies en utilisant Python + Selenium WebDriver

Comment puis-je enregistrer tous les cookies dans Selenium WebDriver de Python dans un fichier .txt, puis les charger plus tard ?

La documentation ne dit pas grand-chose sur la fonction getCookies.

265voto

Ali-Akber Saifee Points 632

Vous pouvez enregistrer les cookies actuels en tant qu'objet Python à l'aide de pickle. Par exemple :

import pickle
import selenium.webdriver

driver = selenium.webdriver.Firefox()
driver.get("http://www.google.com")
pickle.dump( driver.get_cookies() , open("cookies.pkl","wb"))

Et plus tard pour les rajouter :

import pickle
import selenium.webdriver

driver = selenium.webdriver.Firefox()
driver.get("http://www.google.com")
cookies = pickle.load(open("cookies.pkl", "rb"))
for cookie in cookies:
    driver.add_cookie(cookie)

120voto

Eduard Florinescu Points 1586

Lorsque vous avez besoin de cookies d'une session à l'autre, il existe une autre façon de procéder. Utilisez les options Chrome user-data-dir afin d'utiliser des dossiers comme profils. J'exécute :

# You need to: from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument("user-data-dir=selenium") 
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("www.google.com")

Ici, vous pouvez faire les logins qui vérifient l'interaction humaine. Je fais cela et ensuite les cookies dont j'ai besoin maintenant chaque fois que je démarre le Webdriver avec ce dossier, tout est là. Vous pouvez également installer manuellement les extensions et les avoir dans chaque session.

La deuxième fois que je cours, tous les cookies sont là :

# You need to: from selenium.webdriver.chrome.options import Options    
chrome_options = Options()
chrome_options.add_argument("user-data-dir=selenium") 
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("www.google.com") # Now you can see the cookies, the settings, extensions, etc., and the logins done in the previous session are present here. 

L'avantage est que vous pouvez utiliser plusieurs dossiers avec des paramètres et des cookies différents, des extensions sans qu'il soit nécessaire de charger, décharger les cookies, installer et désinstaller les extensions, modifier les paramètres, changer les logins via le code, et donc sans que la logique du programme ne se brise, etc.

De plus, c'est plus rapide que de devoir tout faire par code.

40voto

Exsonic Points 21

N'oubliez pas que vous ne pouvez ajouter un cookie que pour le domaine actuel.

Si vous souhaitez ajouter un cookie pour votre compte Google, procédez comme suit

browser.get('http://google.com')
for cookie in cookies:
    browser.add_cookie(cookie)

26voto

Juste une légère modification pour le code écrit par Roel Van de Paar et tout le mérite lui revient. Je l'utilise sous Windows et il fonctionne parfaitement, tant pour la configuration que pour l'ajout de cookies :

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("--user-data-dir=chrome-data")
driver = webdriver.Chrome('chromedriver.exe',options=chrome_options)
driver.get('https://web.whatsapp.com')  # Already authenticated
time.sleep(30)

19voto

Roel Points 358

Sur la base de la réponse d'Eduard Florinescu mais avec un code plus récent et les importations manquantes ajoutées :

$ cat work-auth.py
#!/usr/bin/python3

# Setup:
# sudo apt-get install chromium-chromedriver
# sudo -H python3 -m pip install selenium

import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("--user-data-dir=chrome-data")
driver = webdriver.Chrome('/usr/bin/chromedriver',options=chrome_options)
chrome_options.add_argument("user-data-dir=chrome-data")
driver.get('https://www.somedomainthatrequireslogin.com')
time.sleep(30)  # Time to enter credentials
driver.quit()

$ cat work.py
#!/usr/bin/python3

import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("--user-data-dir=chrome-data")
driver = webdriver.Chrome('/usr/bin/chromedriver',options=chrome_options)
driver.get('https://www.somedomainthatrequireslogin.com')  # Already authenticated
time.sleep(10)
driver.quit()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X