Come posso salvare tutti i cookie nel Selenium WebDriver di Python in un file txt, quindi caricarli in un secondo momento? La documentazione non dice molto sulla funzione getCookies.
Come posso salvare tutti i cookie nel Selenium WebDriver di Python in un file txt, quindi caricarli in un secondo momento? La documentazione non dice molto sulla funzione getCookies.
Risposte:
Puoi salvare i cookie correnti come oggetto Python usando pickle. Per esempio:
import pickle
import selenium.webdriver
driver = selenium.webdriver.Firefox()
driver.get("http://www.google.com")
pickle.dump( driver.get_cookies() , open("cookies.pkl","wb"))
e successivamente per aggiungerli di nuovo:
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
nuovo ho ricevuto un messaggio di errore che dice che la chiave "scadenza" non è valida. Sto usando Chromedriver su Mac OS
Quando hai bisogno di cookie di sessione in sessione c'è un altro modo per farlo, usa le opzioni di Chrome user-data-dir per poter usare le cartelle come profili, eseguo:
chrome_options = Options()
chrome_options.add_argument("user-data-dir=selenium")
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("www.google.com")
Puoi fare qui gli accessi che controllano l'interazione umana, io faccio questo e poi i cookie di cui ho bisogno ora ogni volta che avvio il Webdriver con quella cartella tutto è lì. Puoi anche installare manualmente le estensioni e averle in ogni sessione. La seconda volta che corro, tutti i cookie ci sono:
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.
Il vantaggio è che puoi utilizzare più cartelle con impostazioni e cookie diversi, estensioni senza la necessità di caricare, scaricare cookie, installare e disinstallare estensioni, modificare le impostazioni, modificare gli accessi tramite codice e quindi non è possibile interrompere la logica del programma, ecc Inoltre questo è più veloce di dover fare tutto tramite codice.
chrome_options = Options()
mi dà name 'Options' is not defined
...?
from selenium.webdriver.chrome.options import Options
Ricorda, puoi aggiungere un cookie solo per il dominio corrente. Se vuoi aggiungere un cookie per il tuo account Google, fallo
browser.get('http://google.com')
for cookie in cookies:
browser.add_cookie(cookie)
Basato sulla risposta di @Eduard Florinescu ma con codice più recente e importazione mancante aggiunta:
$ 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()
Solo una leggera modifica al codice scritto da @Roel Van de Paar, dato che tutto il merito va a lui. Lo sto usando in Windows e funziona perfettamente, sia per l'impostazione che per l'aggiunta di cookie:
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)
questo è il codice che ho usato in Windows, funziona.
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)
il mio sistema operativo è Windows 10 e la versione di Chrome è 75.0.3770.100. Ho provato la soluzione 'user-data-dir', non ha funzionato. prova anche la soluzione di @ Eric Klien. infine, ho impostato le impostazioni di Chrome come nell'immagine, funziona! ma non ha funzionato su Windows Server 2012.
ambientazione