日記とか、工作記録とか

自分に書けることを何でも書いてゆきます。作った物、買ったもの、コンピュータ系の話題が多くなるかもしれません。

Python + Seleniumで何度もログインするのを避けたい

Python + Selenium (Chromedriver)を使って、Webを巡回する仕組みを作ったりしています。
Webサイトにログイン、情報を読み取って保存、属性も併せて保存など、ひととおり自動化できて便利です。

しかしSeleniumは起動したその都度初期化され、状態は保存されません。
次の起動時にはログイン状態も初期化され、何度も繰り返しログインすることになるのです。
サイト側に不審なアクセスと判断されないかとか、心配になったりするわけです。

今回、TweetDeckで流れていくタイムラインの情報を保存、クラスタリングして遊べないかなと試行錯誤していたのですが、TweetDeckってログインするたびに「新しい環境からのログインがありました」とスマホに通知がくるので、心配になりました。その流れで、pickleを使うと簡単にcookieを保存しておくことができ、またそれをリストアすればログインの手順を省けるということがわかりました。

全体は長いので要所のみですが、こんな感じ。
Visual Studio CodeにJupyterを追加した環境で常時起動状態にしてタイムラインの情報を保存しています。

import pickle
from selenium import webdriver

ROOTDIR='D:/Python3.9/cookie/'
COOKIES='cookies.pkl'

# TweetDeckにログイン(一度getを呼んでから)
driver.get('https://tweetdeck.twitter.com/')
driver.set_window_size(2000, 1200)

# Cookieがあればロード、なければログイン
if os.path.exists(os.path.join(ROOTDIR, COOKIES)):
    cookies = pickle.load(open(os.path.join(ROOTDIR, COOKIES), 'rb'))
    for cookie in cookies:
        driver.add_cookie(cookie)

    # もう一度アクセスするとログイン状態になる
    driver.get('https://tweetdeck.twitter.com/')
else:
    # ここにログイン操作を書く
    ...
    # Cookieを保存しておく
    pickle.dump(driver.get_cookies(), open(os.path.join(ROOTDIR, COOKIES), 'wb'))