ti-enxame.com

Como salvar e carregar cookies usando Python + Selenium WebDriver

Como posso salvar todos os cookies no Selenium WebDriver do Python em um arquivo txt e, em seguida, carregá-los depois? A documentação não diz muito sobre a função getCookies.

67
Aaron Hiniker

Você pode salvar os cookies atuais como um objeto pythonusando o pickle. Por exemplo:

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 depois para adicioná-los de volta:

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)
127
Ali-Akber Saifee

Lembre-se, você só pode adicionar um cookie para o domínio atual. Se você quiser adicionar um cookie para sua conta do Google, faça

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

Quando você precisa de cookies de sessão para sessão existe outra maneira de fazer isso, use o Chrome opções user-data-dir para usar pastas como perfis, eu corro:

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

Você pode fazer aqui os logins que verificam a interação humana, eu faço isso e depois os cookies que preciso agora toda vez que eu inicio o Webdriver com aquela pasta que está tudo lá. Você também pode instalar manualmente as extensões e tê-las em todas as sessões. Secon tempo eu corro, todos os cookies estão 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. 

A vantagem é que você pode usar várias pastas com diferentes configurações e cookies, extensões sem a necessidade de carregar, descarregar cookies, instalar e desinstalar extensões, alterar configurações, alterar logins via código e, portanto, não há como quebrar a lógica do programa, Além disso, é mais rápido do que ter que fazer tudo por código.

24
Eduard Florinescu

Baseado na resposta de @Eduard Florinescu, mas com o código mais recente e a importação ausente adicionada:

$ 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()
1
Roel