Jak mogę zapisać wszystkie pliki cookie w Selenium WebDriver Pythona do pliku txt, a następnie załadować je później? Dokumentacja niewiele mówi o funkcji getCookies.
Jak mogę zapisać wszystkie pliki cookie w Selenium WebDriver Pythona do pliku txt, a następnie załadować je później? Dokumentacja niewiele mówi o funkcji getCookies.
Odpowiedzi:
Możesz zapisać aktualne pliki cookie jako obiekt Pythona za pomocą pickle. Na przykład:
import pickle
import selenium.webdriver
driver = selenium.webdriver.Firefox()
driver.get("http://www.google.com")
pickle.dump( driver.get_cookies() , open("cookies.pkl","wb"))
a później, aby dodać je z powrotem:
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
ponownie t, pojawia się komunikat o błędzie informujący, że klucz „wygaśnięcia” jest nieprawidłowy. Używam chromedriver w systemie Mac OS
Kiedy potrzebujesz plików cookie z sesji na sesję, jest inny sposób, aby to zrobić, użyj opcji Chrome options user-data-dir, aby używać folderów jako profili, uruchamiam:
chrome_options = Options()
chrome_options.add_argument("user-data-dir=selenium")
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("www.google.com")
Możesz tutaj logować się, aby sprawdzić interakcję człowieka. Robię to, a następnie potrzebuję plików cookie za każdym razem, gdy uruchamiam Webdriver z tym folderem, wszystko tam jest. Możesz także ręcznie zainstalować rozszerzenia i mieć je w każdej sesji. Gdy uruchamiam, wszystkie pliki cookie są tam:
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.
Zaletą jest to, że możesz korzystać z wielu folderów z różnymi ustawieniami i plikami cookie, Rozszerzenia bez konieczności ładowania, wyładowywania plików cookie, instalowania i odinstalowywania rozszerzeń, zmiany ustawień, zmiany logowań za pomocą kodu, a tym samym nie ma możliwości, aby logika programu się zepsuła, itd. Jest to również szybsze niż robienie tego wszystkiego za pomocą kodu.
chrome_options = Options()
daje mi name 'Options' is not defined
...?
from selenium.webdriver.chrome.options import Options
Pamiętaj, że możesz dodać plik cookie tylko dla bieżącej domeny. Jeśli chcesz dodać plik cookie do swojego konta Google, zrób
browser.get('http://google.com')
for cookie in cookies:
browser.add_cookie(cookie)
Na podstawie odpowiedzi @Eduard Florinescu, ale z nowszym kodem i dodanym brakującym importem:
$ 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()
Tylko niewielka modyfikacja kodu napisanego przez @Roel Van de Paar, ponieważ cała zasługa jego. Używam tego w systemie Windows i działa doskonale, zarówno do ustawiania, jak i dodawania plików 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)
to jest kod, którego użyłem w systemie Windows, działa.
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)