Como posso salvar todos os cookies no Selenium WebDriver do Python em um arquivo txt e carregá-los mais tarde? A documentação não diz muito sobre a função getCookies.
Como posso salvar todos os cookies no Selenium WebDriver do Python em um arquivo txt e carregá-los mais tarde? A documentação não diz muito sobre a função getCookies.
Respostas:
Você pode salvar os cookies atuais como um objeto Python usando 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)
drive.add_cookie
novamente, recebo uma mensagem de erro dizendo que a chave de "expiração" não é válida. Estou usando o chromedriver no Mac OS
Quando você precisa de cookies de sessão para sessão, há outra maneira de fazer isso, use as opções do Chrome user-data-dir para usar pastas como perfis, eu executo:
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 de que preciso agora, toda vez que inicio o Webdriver com essa pasta, tudo está lá. Você também pode instalar manualmente as extensões e tê-las em todas as sessões. Na segunda vez que 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 interromper a lógica do programa, etc Além disso, isso é mais rápido do que ter que fazer tudo por código.
chrome_options = Options()
me dá name 'Options' is not defined
...?
from selenium.webdriver.chrome.options import Options
Lembre-se de que você só pode adicionar um cookie para o domínio atual. Se você quiser adicionar um cookie à sua conta do Google, faça
browser.get('http://google.com')
for cookie in cookies:
browser.add_cookie(cookie)
Com base na resposta de @Eduard Florinescu, mas com código mais recente e 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()
Apenas uma pequena modificação no código escrito por @Roel Van de Paar, já que todo o crédito vai para ele. Estou usando no Windows e está funcionando perfeitamente, tanto para definir quanto para adicionar 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 é o código que usei no 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)
meu sistema operacional é o Windows 10 e a versão do Chrome é 75.0.3770.100. Eu tentei a solução 'user-data-dir', não funcionou. tentar a solução de @Eric Klien também falha. finalmente, faço a configuração do cromo como na imagem, funciona! mas não funcionou no Windows Server 2012.
configuração