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.
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)
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)
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.
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()
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
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)
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)