¿Cómo puedo guardar todas las cookies en Selenium WebDriver de Python en un archivo txt y luego cargarlas más tarde? La documentación no dice mucho sobre la función getCookies.
¿Cómo puedo guardar todas las cookies en Selenium WebDriver de Python en un archivo txt y luego cargarlas más tarde? La documentación no dice mucho sobre la función getCookies.
Respuestas:
Puede guardar las cookies actuales como un objeto de Python usando pickle. Por ejemplo:
import pickle
import selenium.webdriver
driver = selenium.webdriver.Firefox()
driver.get("http://www.google.com")
pickle.dump( driver.get_cookies() , open("cookies.pkl","wb"))
y luego para volver a agregarlos:
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
nuevo, aparece un mensaje de error que dice que la clave de "caducidad" no es válida. Estoy usando chromedriver en Mac OS
Cuando necesite cookies de una sesión a otra, hay otra forma de hacerlo, use las opciones de Chrome user-data-dir para usar carpetas como perfiles, ejecuto:
chrome_options = Options()
chrome_options.add_argument("user-data-dir=selenium")
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("www.google.com")
Puede hacer aquí los inicios de sesión que verifican la interacción humana, yo hago esto y luego las cookies que necesito ahora cada vez que inicio el Webdriver con esa carpeta, todo está allí. También puede instalar manualmente las Extensiones y tenerlas en cada sesión. Segundo tiempo que corro, todas las cookies están ahí:
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.
La ventaja es que puede usar múltiples carpetas con diferentes configuraciones y cookies, extensiones sin la necesidad de cargar, descargar cookies, instalar y desinstalar extensiones, cambiar configuraciones, cambiar inicios de sesión a través del código y, por lo tanto, no hay forma de que se rompa la lógica del programa. etc También esto es más rápido que tener que hacerlo todo por código.
chrome_options = Options()
me da name 'Options' is not defined
...?
from selenium.webdriver.chrome.options import Options
Recuerde, solo puede agregar una cookie para el dominio actual. Si desea agregar una cookie a su cuenta de Google, haga
browser.get('http://google.com')
for cookie in cookies:
browser.add_cookie(cookie)
Basado en la respuesta de @Eduard Florinescu pero con un código más nuevo y una importación faltante agregada:
$ 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 pequeña modificación para el código escrito por @Roel Van de Paar, ya que todo el crédito es para él. Estoy usando esto en Windows y está funcionando perfectamente, tanto para configurar como para agregar 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)
este es el código que usé en Windows, funciona.
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)
mi sistema operativo es Windows 10 y la versión de Chrome es 75.0.3770.100. Probé la solución 'user-data-dir', no funcionó. Prueba la solución de @ Eric Klien también falla. finalmente, hago la configuración de Chrome como la imagen, ¡funciona! pero no funcionó en Windows Server 2012.
ajuste