Wie kann ich alle Cookies in Pythons Selenium WebDriver in einer txt-Datei speichern und später laden? Die Dokumentation sagt nicht viel über die Funktion getCookies aus.
Wie kann ich alle Cookies in Pythons Selenium WebDriver in einer txt-Datei speichern und später laden? Die Dokumentation sagt nicht viel über die Funktion getCookies aus.
Antworten:
Sie können die aktuellen Cookies mit pickle als Python-Objekt speichern. Beispielsweise:
import pickle
import selenium.webdriver
driver = selenium.webdriver.Firefox()
driver.get("http://www.google.com")
pickle.dump( driver.get_cookies() , open("cookies.pkl","wb"))
und später, um sie wieder hinzuzufügen:
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
erneut versuche, wird eine Fehlermeldung angezeigt, dass der Schlüssel "Ablauf" ungültig ist. Ich benutze Chromedriver unter Mac OS
Wenn Sie von Sitzung zu Sitzung Cookies benötigen, gibt es eine andere Möglichkeit. Verwenden Sie die Chrome-Optionen Benutzerdatenverzeichnis, um Ordner als Profile zu verwenden.
chrome_options = Options()
chrome_options.add_argument("user-data-dir=selenium")
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("www.google.com")
Sie können hier die Anmeldungen vornehmen, die auf menschliche Interaktion prüfen. Ich mache dies und dann die Cookies, die ich jetzt jedes Mal benötige, wenn ich den Webdriver mit diesem Ordner starte. Alles ist dort. Sie können die Erweiterungen auch manuell installieren und in jeder Sitzung verwenden. Sekunden nachdem ich gelaufen bin, sind alle Cookies da:
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.
Der Vorteil ist, dass Sie mehrere Ordner mit unterschiedlichen Einstellungen und Cookies verwenden können. Erweiterungen ohne Laden, Entladen von Cookies, Installieren und Deinstallieren von Erweiterungen, Ändern von Einstellungen, Ändern von Anmeldungen per Code und somit keine Möglichkeit, die Logik der Programmunterbrechung zu ändern. usw. Auch dies ist schneller als alles, um alles per Code zu erledigen.
chrome_options = Options()
gibt mir name 'Options' is not defined
...?
from selenium.webdriver.chrome.options import Options
Denken Sie daran, dass Sie nur ein Cookie für die aktuelle Domain hinzufügen können. Wenn Sie ein Cookie für Ihr Google-Konto hinzufügen möchten, tun Sie dies
browser.get('http://google.com')
for cookie in cookies:
browser.add_cookie(cookie)
Basierend auf der Antwort von @Eduard Florinescu, aber mit neuerem Code und fehlendem Import hinzugefügt:
$ 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()
Nur eine kleine Änderung für den Code, der von @Roel Van de Paar geschrieben wurde, da ihm alle Ehre gemacht wird. Ich verwende dies in Windows und es funktioniert perfekt, sowohl zum Setzen als auch zum Hinzufügen von 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)
Dies ist Code, den ich in Windows verwendet habe. Es funktioniert.
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)
Mein Betriebssystem ist Windows 10 und die Chrome-Version ist 75.0.3770.100. Ich habe die 'User-Data-Dir'-Lösung ausprobiert, hat aber nicht funktioniert. versuchen die lösung von @ Eric Klien scheitert auch. Schließlich mache ich die Chrome-Einstellung wie auf dem Bild, es funktioniert! Aber es hat auf Windows Server 2012 nicht funktioniert.
Rahmen