2013-02-25 30 views

risposta

85

È possibile salvare i cookie correnti come oggetto python utilizzando 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 poi aggiungerli indietro:

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) 
+0

Sto ricevendo errore "pickle protocol deve essere <= 2". Usando il codice pickle che hai postato. Cosa significa questo? Si riferisce agli argomenti? –

+0

Questo farebbe la stessa cosa? cookieFile = open ("cookies.pkl", "w") dump = pickle.dumps (driver.get_cookies()) cookieFile.write (dump) –

+0

Ciao Aaron, ho modificato un po 'l'esempio - in pratica il il flag "b" è stato aggiunto alle sezioni aperte del file. Puoi provare con quello? –

16

Ricordate, si può solo aggiungere dei cookie per dominio corrente. se vuoi aggiungere il tuo account Goolge.

fare

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

Questo dovrebbe essere nella loro documentazione :( – Tjorriemorrie

0

Quando è necessario i cookie di sessione in sessione c'è un altro modo per farlo, utilizzare il Chrome opzioni user-data-dir, al fine di utilizzare le cartelle come profili, corro:

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

Si può 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ì dentro. Puoi anche installare manualmente le estensioni e averli in ogni sessione. Secon volta corro, tutti i cookie sono 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 and the logins done in the previous session are present here 

Il vantaggio è che si può utilizzare più cartelle con diverse impostazioni e biscotti, estensioni, senza la necessità di caricare, scaricare biscotti, installare e disinstallare le estensioni, modificare le impostazioni , cambia login via codice, e quindi non c'è modo di avere la logica dell'interruzione del programma, ecc. Anche questo è più veloce di dover fare tutto per codice.

Problemi correlati