今回はSeleniumでブラウザのCookieを一覧で取得する方法について紹介したいと思います
Contents
前準備
実行環境はjupyterlabもしくはjupyternotebookを想定しています
# ライブラリをインストールする $ pip install webdriver-manager $ pip install selenium $ pip install chromedriver_binary
インストールできたらブラウザを起動します
from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.common.desired_capabilities import DesiredCapabilities url = 'https://www.amazon.co.jp/' d = DesiredCapabilities.CHROME d['goog:loggingPrefs'] = {'performance': 'ALL'} driver = webdriver.Chrome(ChromeDriverManager().install(),desired_capabilities=d) driver.set_window_size('1200','1000') driver.get(url)
上記のコードを実行するとブラウザが立ち上がりamazonのトップページにアクセスするのでそこで手入力でログイン情報を入力してログイン状態にします
このログインした時点でseleniumのブラウザ内にログイン情報を格納したcookieが保存されるので、それを確認します
seleniumではdriver.get_cookies()を実行すると、ブラウザが読み込んでいるcookieを確認することができます。
# ブラウザが読み込んでいるCookieを一覧で確認する driver.get_cookies()
実行すると以下のような感じでリストの中に複数の連想配列(辞書型)が格納されたcookieが確認できます
<実行結果>
[{‘domain’: ‘www.amazon.co.jp’, ‘expiry’: 1586335760, ‘httpOnly’: False, ‘name’: ‘UULE’, ‘path’: ‘/’, ‘secure’: False, ‘value’: ‘a+cm9sZToxIHByb2R1Y2VyOjEyIHByb3ZlbmFuY2U6NiB0aW1lc3RhbXA6MTU4NjI0OTM2MDAzNjAwMCBsYXRsbmd7bGF0aXR1ZGVfZTc6MTM3MjQ3ODg1IGxvbmdpdHVkZV9lNzoxMDA1ODQyNTMwfSByYWRpdXM6NDI3ODA=’}, {‘domain’: ‘.amazon.co.jp’, ‘expiry’: 1588841359, ‘httpOnly’: False, ‘name’: ‘1P_JAR’, ‘path’: ‘/’, ‘secure’: True, ‘value’: ‘2020-4-7-8’}, {‘domain’: ‘.amazon.co.jp’, ‘expiry’: 1602060558.946378, ‘httpOnly’: True, ‘name’: ‘NID’, ‘path’: ‘/’, ‘secure’: True, ‘value’: ‘201=xmM_5TCdhsLbsOG_y4AtLKLDyP9e9nFv2siJ2KzlX1tsPf1Jl4PF9ZrjgMQT67Cy7jv83lYN_OpeGXyL2upwBMn_au97INU3hk7aFUhvMrZLC-9uvL20ZV-WVU2x6_pnfsuHhYeTAixugAt_DhDOzaR5gcnhouJYGXTC0Gm6fyM’}]
これをほかのPCやサーバーで使用したい場合はテキストファイルに書き出すか、コピペしてべた張りします。
また以下のようにしてブラウザ内にあるcookieから該当するものをピンポイントで検索することも可能です(まああんまり使わない)
cookie = driver.get_cookie("ABC") #取得したクッキーを表示 print(cookie)
seleniumではdriver.add_cookie()
で外部からcookieを読み込ませることができます。これでlinuxのheadlessしかないサーバーでamazonやTwitterにログインした状態を簡単に再現することができます。
~~~~~~~~~~~~~~~~ url = 'https://www.amazon.co.jp/' driver.get(url) #1回アクセスしておく json_open = open('cookie.txt', 'r') cookies = json.load(json_open) for cookie in cookies: tmp = {"name": cookie["name"], "value": cookie["value"]} driver.add_cookie(tmp) driver.get(url) # 2回目のアクセス print(driver.current_url) # URLを確認してログイン成功時のリダイレクトなどを確認
cookeiはjson形式であるため、jsonとして読み込んでいます。
追加する際はdriver.get_cookies()
で取得したcookieの辞書データの中からnameとvalueのキーの値だけを抜き出して利用します。
クッキー追加するには追加時に対象サイトへはアクセス済みが前提となります。1回目のアクセスを行わないと、以下のエラーが発生します。
selenium.common.exceptions.InvalidCookieDomainException: Message: invalid cookie domain |
そのため、2回アクセスするような処理をコーディングしています。
その他注意点
cookieはブラウザで違うため、firefoxで取得したcookieをgooglechromeで使用することはできないので、取得と読み込みは必ず同じブラウザで行ってください
その他関連記事
関連記事:【Python】Seleniumでファイルをアップロードするサンプルコード
関連記事:SeleniumでGoogleアカウントにログインした状態で起動する方法
コメント