取得したクッキーを保存して読み直すだけのコードである。
from selenium import webdriver import json driver = webdriver.Firefox() #driver = webdriver.Chrome() #driver = webdriver.PhantomJS() try: driver.get("http://www.google.com") fw = open('cookies.json','w') json.dump(driver.get_cookies(),fw,indent=4) fw.close() f = open("cookies.json") cookies = json.load(f) f.close() for cookie in cookies: driver.add_cookie(cookie) finally: driver.quit()
最近Firefoxのバージョンを最新(57)に上げたら、上のコードがエラーになった。
$ python test.py Traceback (most recent call last): File "test.py", line 24, in <module> driver.add_cookie(cookie) File "/usr/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 760, in add_cookie self.execute(Command.ADD_COOKIE, {'cookie': cookie_dict}) File "/usr/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 308, in execute self.error_handler.check_response(response) File "/usr/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 194, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.WebDriverException: Message: .google.co.jp
よく分からん。
ドメインの先頭にドットがついてるとエラーになる(InvalidCookieDomainException)という話もあるみたいだけど、generalなWebDriverExceptionとしか出てこないので、やっぱりよく分からん。
先頭のドットを消すと確かにExceptionを出さずに動くようになるのだが、そうすると目的のプログラムでcookieを期待通りに読んでくれなくなって詰む。
仕方ないのでChromeを使うか・・・と思うと、今度はswitch_to.windowでactiveにしたウインドウ(タブ)は必ずフォアグラウンドになってしまうというアレな仕様で詰む。(参考:ウインドウの最小化 - XXXannex)
Seleniumを使うと、だいたいあちらを立てればこちらが立たぬ・・・みたいなことが多くてウンザリする。
iMacrosを自動起動する方向に変換した方がいいのかもしれない。まあ、あちらはあちらでwindows nativeなことができなくて困りそうだけど。
ま、いいや。とりあえず適当に53(53.0.3)くらいまで戻して事なきを得た。二度とアップグレードしないぞ。
追記
自動更新をOFFにし忘れたせいでまた57にアップグレードされてしまった。切れそう。