Подтвердить что ты не робот

Как сохранить и загрузить куки с помощью Python + Selenium WebDriver

Как сохранить все файлы cookie в Python Selenium WebDriver в виде txt файла, а затем загрузить их позже? Документация ничего не говорит о функции getCookies.

4b9b3361

Ответ 1

Вы можете сохранить текущие куки как объект 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)

Ответ 2

Помните, что вы можете только добавить cookie для текущего домена. Если вы хотите добавить куки для своей учетной записи Google, сделайте

browser.get('http://google.com')
for cookie in cookies:
    browser.add_cookie(cookie)

Ответ 3

Когда вам нужны файлы 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, устанавливать и удалять расширения, изменять настройки, изменять логины с помощью кода и, таким образом, не иметь логики прерывания программы, и т.д. Кроме того, это быстрее, чем с помощью кода.

Ответ 4

На основании ответа @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()

Ответ 5

Просто небольшая модификация кода, написанного @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)

Ответ 6

У меня ОС Windows 10, а версия Chrome - 75.0.3770.100. Я попробовал решение 'user-data-dir', не сработало. попробовать решение @Эрик Клиен тоже не удастся. наконец, я делаю настройку Chrome, как на картинке, она работает! но она не работает на Windows Server 2012.

установка

enter image description here

Ответ 7

это код, который я использовал в 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)