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