Как я могу сохранить все файлы 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
снова, я получаю сообщение об ошибке, в котором говорится, что ключ «срок действия» недействителен. Я использую chromedriver в Mac OS
Когда вам нужны файлы cookie от сеанса к сеансу, есть другой способ сделать это, используя параметры Chrome user-data-dir, чтобы использовать папки в качестве профилей, я запускаю:
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 с этой папкой, все там есть. Вы также можете вручную установить расширения и использовать их в каждом сеансе. В следующий раз, когда я бегу, все куки есть:
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, устанавливать и удалять расширения, изменять настройки, изменять логины с помощью кода и, следовательно, не иметь возможности иметь логику прерывания программы, и т.д. Также это быстрее, чем делать все с помощью кода.
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)
это код, который я использовал в окнах, он работает.
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)