Firefox webdriverでcookieが読めなくなった話

取得したクッキーを保存して読み直すだけのコードである。

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にアップグレードされてしまった。切れそう。