web-dev-qa-db-fra.com

Comment enregistrer et charger des cookies avec Python + Selenium WebDriver

Comment puis-je sauvegarder tous les cookies dans Selenium WebDriver de Python dans un fichier txt, puis les charger plus tard? La documentation ne dit pas grand chose de la fonction getCookies.

74
Aaron Hiniker

Vous pouvez enregistrer les cookies actuels en tant qu'objet python en utilisant 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)
134
Ali-Akber Saifee

N'oubliez pas que vous ne pouvez ajouter qu'un cookie pour le domaine actuel. Si vous souhaitez ajouter un cookie à votre compte Google, faites

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

Lorsque vous avez besoin de cookies de session en session, il existe un autre moyen de le faire, utilisez le répertoire Chrome options user-data-dir afin de pouvoir utiliser des dossiers en tant que profils, je lance:

chrome_options = Options()
chrome_options.add_argument("user-data-dir=Selenium") 
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("www.google.com")

Vous pouvez faire ici les connexions qui vérifient les interactions humaines. Je le fais, puis les cookies dont j'ai besoin maintenant chaque fois que je lance Webdriver avec ce dossier, tout y est. Vous pouvez également installer manuellement les extensions et les avoir à chaque session. Secon heure je cours, tous les cookies sont là:

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 avoir besoin de charger, décharger des cookies, d’installer et de désinstaller des extensions, de modifier les paramètres, de modifier les connexions via le code, et donc de ne pas avoir la logique du programme, Et c’est aussi plus rapide que d’avoir à tout faire par code.

25
Eduard Florinescu

Basé sur la réponse de @Eduard Florinescu mais avec un code plus récent et une importation manquante ajoutée:

$ 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()
3
Roel Van de Paar

mon système d'exploitation est Windows 10, et la version chrome est 75.0.3770.100. J'ai essayé la solution 'user-data-dir', cela n'a pas fonctionné. essayez la solution de @ Eric Klien échoue. aussi, enfin, je fais le réglage chrome comme sur la photo, ça marche! mais ça ne marchait pas sur Windows Server 2012.

réglage

enter image description here

0
battlesteed

Juste une légère modification du code écrit par @Roel Van de Paar, car tout le mérite lui revient. J'utilise cela sous Windows et cela fonctionne parfaitement, à la fois pour la configuration et 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)
0

c'est le code que j'ai utilisé dans Windows, ça marche.

 for item in COOKIES.split(';'):
            name,value = item.split('=',1)
            name=name.replace(' ','').replace('\r','').replace('\n','')
            value = value.replace(' ','').replace('\r','').replace('\n','')
            cookie_dict={  
                    'name':name,
                    'value':value,
                    "domain": "",  # google chrome
                    "expires": "",
                    'path': '/',
                    'httpOnly': False,
                    'HostOnly': False,
                    'Secure': False
                    }
            self.driver_.add_cookie(cookie_dict)
0
yong you