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.
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.
Réponses:
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)
drive.add_cookie
nouveau, j'ai reçu un message d'erreur indiquant que la clé «expiration» n'est pas valide. J'utilise chromedriver sur Mac OS
Lorsque vous avez besoin de cookies de session en session, il existe une autre façon de le faire, utilisez les options Chrome user-data-dir afin d'utiliser des dossiers comme 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 l'interaction humaine, je le fais, puis les cookies dont j'ai besoin maintenant chaque fois que je démarre le Webdriver avec ce dossier, tout y est. Vous pouvez également installer manuellement les extensions et les avoir dans chaque session. Secon fois que 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 différents paramètres et cookies, des extensions sans avoir besoin de charger, décharger les cookies, installer et désinstaller des extensions, modifier les paramètres, modifier les connexions via le code, et donc aucun moyen d'avoir la logique de la rupture du programme, etc C'est aussi plus rapide que de tout faire par code.
chrome_options = Options()
me donne name 'Options' is not defined
...?
from selenium.webdriver.chrome.options import Options
N'oubliez pas que vous ne pouvez ajouter qu'un cookie pour le domaine actuel. Si vous souhaitez ajouter un cookie pour votre compte Google, faites
browser.get('http://google.com')
for cookie in cookies:
browser.add_cookie(cookie)
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()
Juste une légère modification pour le code écrit par @Roel Van de Paar, car tout le mérite lui revient. J'utilise ceci dans 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, cela fonctionne.
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)
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é. essayer la solution de @ Eric Klien échoue aussi. enfin, je fais le réglage chrome comme l'image, ça marche! mais ça n'a pas fonctionné sur Windows Server 2012.
réglage