web-dev-qa-db-ja.com

Python + Selenium WebDriverを使用してCookieを保存およびロードする方法

PythonのSelenium WebDriverのすべてのCookieをtxtファイルに保存し、後で読み込むにはどうすればよいですか?ドキュメントでは、getCookies関数については何も述べていません。

74
Aaron Hiniker

Pickleを使用して、現在のCookieをpythonオブジェクトとして保存できます。例えば:

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)
134

現在のドメインのCookieのみを追加できることを忘れないでください。 GoogleアカウントにCookieを追加したい場合は、

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

セッションごとにcookieが必要な場合、別の方法があります。プロファイルとしてフォルダーを使用するには、Chrome options 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")

ここで、人間の相互作用を確認するログインを行うことができます。これを行うと、すべてがそこにあるフォルダーでWebdriverを起動するたびに必要なCookieを実行します。拡張機能を手動でインストールして、すべてのセッションで拡張機能を使用することもできます。私が実行するSecon時間、すべての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のロード、アンロード、拡張機能のインストールとアンインストール、設定の変更、コードによるログインの変更が不要なため、プログラムのロジックを中断する方法がないことです。 etcまた、これはhavinよりも高速であり、すべてコードで実行できます。

25

@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()
3

私のOSはWindows 10であり、chromeバージョンは75.0.3770.100です。 「user-data-dir」ソリューションを試しましたが、うまくいきませんでした。 @ Eric Klienのソリューションも失敗します。最後に、chromeの設定を図のようにします。機能しますが、Windows Server 2012では機能しませんでした。

セッティング

enter image description here

0
battlesteed

@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)
0
yong you