Як я можу зберегти всі файли cookie у Selenium WebDriver Python у txt-файл, а потім завантажити їх пізніше? Документація нічого не говорить про функцію getCookies.
Як я можу зберегти всі файли cookie у Selenium WebDriver Python у txt-файл, а потім завантажити їх пізніше? Документація нічого не говорить про функцію getCookies.
Відповіді:
Ви можете зберегти поточні файли cookie як об’єкт python, використовуючи pickle. Наприклад:
import pickle
import selenium.webdriver
driver = selenium.webdriver.Firefox()
driver.get("http://www.google.com")
pickle.dump( driver.get_cookies() , open("cookies.pkl","wb"))
а пізніше, щоб додати їх назад:
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
т, мені надійшло повідомлення про помилку, в якому сказано, що ключ "термін дії" недійсний. Я використовую Chromeedriver на Mac OS
Коли вам потрібні файли cookie від сеансу до сеансу, є ще один спосіб зробити це, використовуйте параметри Chrome-data-dir-параметри Chrome для використання папок як профілів, я запускаю:
chrome_options = Options()
chrome_options.add_argument("user-data-dir=selenium")
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("www.google.com")
Ви можете зробити тут логіни, які перевіряють взаємодію людини, я це роблю, а потім файли cookie, які мені потрібні зараз кожного разу, коли я запускаю Webdriver з цією папкою, все є там. Ви також можете встановити розширення вручну та мати їх у кожному сеансі. Час, коли я запускаю, всі файли cookie є:
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.
Перевага полягає в тому, що ви можете використовувати декілька папок з різними налаштуваннями та файлами cookie, розширення без необхідності завантажувати, завантажувати файли cookie, встановлювати та видаляти розширення, змінювати налаштування, змінювати входи через код, і, таким чином, ніяк не порушувати логіку розриву програми, тощо. Це також швидше, ніж Havin, щоб зробити це все за кодом.
chrome_options = Options()
дає мені name 'Options' is not defined
...?
from selenium.webdriver.chrome.options import Options
Пам'ятайте, що ви можете лише додати cookie для поточного домену. Якщо ви хочете додати файл cookie для свого облікового запису Google, зробіть це
browser.get('http://google.com')
for cookie in cookies:
browser.add_cookie(cookie)
На основі відповіді @Eduard Florinescu, але додано новіший код та відсутній імпорт:
$ 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()
Просто невелика модифікація коду, написаного @Roel Van de Paar, оскільки вся заслуга йому належить. Я використовую це в Windows, і він прекрасно працює, як для налаштування, так і для додавання файлів 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)
це код, який я використовував у Windows, він працює.
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)
мій ОС - це Windows 10, а хромована версія - 75.0.3770.100. Я спробував рішення "user-data-dir", не вийшло. спробувати рішення @ Еріка Клієна теж не вдається. нарешті, я роблю параметр хрому, як на малюнку, він працює! Але він не працював на Windows Server 2012.
налаштування