回答:
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)
drive.add_cookie
と、「有効期限」キーが無効であるというエラーメッセージが表示されます。私は、Mac OS上でchromedriverを使用しています
セッション間で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")
ここでは、人間とのやり取りをチェックするログインを実行できます。これを実行してから、そのフォルダーにあるすべてのものを使用して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、拡張機能のロード、アンロード、拡張機能のインストールとアンインストール、設定の変更、コードによるログインの変更を必要とせずに拡張機能を使用できる複数のフォルダーを使用できるため、プログラムのロジックを中断させる方法がないことです。 etcまた、これはコードですべてを実行するhavinよりも高速です。
chrome_options = Options()
くれname 'Options' is not defined
...
from selenium.webdriver.chrome.options import Options
現在のドメインにのみCookieを追加できることに注意してください。GoogleアカウントにCookieを追加する場合は、
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)