Python Selenium

SeleniumでのCookieの取得や外部からの読み込み方法について

この記事は約6分で読めます。

 

今回はSeleniumでブラウザのCookieを一覧で取得する方法について紹介したいと思います

 

前準備

 

実行環境は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を利用したcookieの取り扱い

 

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から該当するものをピンポイントで検索することも可能です(まああんまり使わない)

 

cookie = driver.get_cookie("ABC")
#取得したクッキーを表示
print(cookie)

 

外部の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のキーの値だけを抜き出して利用します。

 

nvalidCookieDomainException: Message: invalid cookie domainが発生する場合

 

クッキー追加するには追加時に対象サイトへはアクセス済みが前提となります。1回目のアクセスを行わないと、以下のエラーが発生します。

 

selenium.common.exceptions.InvalidCookieDomainException: Message: invalid cookie domain

 

そのため、2回アクセスするような処理をコーディングしています。

 

その他注意点

 

cookieはブラウザで違うため、firefoxで取得したcookieをgooglechromeで使用することはできないので、取得と読み込みは必ず同じブラウザで行ってください

 

その他関連記事

 

関連記事:【Python】Seleniumでファイルをアップロードするサンプルコード

 

関連記事:SeleniumでGoogleアカウントにログインした状態で起動する方法

 


プログラミング・スクレイピングツール作成の相談を受け付けています!

クラウドワークス・ココナラ・MENTAなどでPython・SQL・GASなどのプログラミングに関する相談やツール作成などを承っております!

過去の案件事例:

  • Twitter・インスタグラムの自動化ツール作成
  • ウェブサイトのスクレイピングサポート
  • ダッシュボード・サイト作成
  • データエンジニア転職相談

これまでの案件例を見る

キャリア相談もお気軽に!文系学部卒からエンジニア・データサイエンティストへの転職経験をもとに、未経験者がどう進むべきかのアドバイスを提供します。


スポンサーリンク
/* プログラミング速報関連記事一覧表示 */
ミナピピンの研究室

コメント

タイトルとURLをコピーしました