朝のルーチンワークを少しでも減らそうとPythonで売上・アクセスデータの集計報告ツールを作って動作させているのですが、ある日正常に動かなくなった話。
売上・アクセスデータ集計報告ツール
- タスクスケジューラからPythonファイルを実行
- SeleniumでGoogle Analyticsへログイン
- Google AnalyticsからCSVデータをダウンロード
- pandasで過去のCSVデータと統合
- Excelで集計・分析
- 対目標・対前年で比較したデータをSlack BotにPOST
こいつが7月に入ってある日突然CSVデータがダウンロードされなくなった。
Google Analyticsにログインすることはできている。でもCSVはダウンロードされない。
いや、まぁ、手でやっても2分もかからない作業ではあるんですが、やっぱり単純作業はやらなくていいならやりたくないですよね。
chromedriver.exeが古かった
結論から言うと原因はchromedriver.exeが2018年3月時点のものだったこと。
そんなに頻繁に更新があるものと思っていなかったため最初はGoogle Analytics側のDOMが変わったのだろうと疑っていた。
しかし実際のところは以下から最新のchromedriver.exeをダウンロードして以前のexeファイルに上書き保存すれば済む話でした・・・。
2018年6月のバージョンを使うことで改善。
ChromeDriver - WebDriver for Chrome
http://chromedriver.chromium.org/downloads
見てもしょうがないかもしれませんが、色々試した経緯を残しておきます。
Google AnalyticsのDOMが変わった・・・?
CSVダウロードに必要な箇所は変わっていませんでした。
ちなみにログインからCSVダウンロードまでのプログラムは以下のようなもの
download_directory = 'ダウンロード先ディレクトリ'
user_id = 'ユーザー名'
user_pass = 'パスワード'
driver = init_selenium(download_path=download_directory)
driver.implicitly_wait(10)
driver.get('カスタムレポートのURL')
driver.find_element_by_css_selector('#identifierId').send_keys(user_id)
driver.find_element_by_css_selector('#identifierNext > content > span').click()
driver.find_element_by_name('password').send_keys(user_pass)
time.sleep(2)
driver.find_element_by_css_selector('#passwordNext span').click()
time.sleep(10)
iframe = driver.find_element_by_css_selector('#galaxyIframe')
driver.switch_to.frame(iframe)
driver.find_element_by_css_selector('.ACTION-exportMenu').click()
driver.find_element_by_css_selector('.TARGET-CSV').click()
time.sleep(10)
Google Analyticsの画面はレポート表示領域がインラインフレームで形成されています。
故に操作対象をiframeに移す処理switch_to.frame
が必要になるわけです。
途中からブラウザ接続が切断されていた
find_element_by_css_selector
の指定がおかしいのか? でもエラーで止まってるのはフレームに移動する前段階・・・。
driver.switch_to.frame(iframe)
がおかしいのか・・・? でも推奨されている記述どおりで、driver.switch_to_frame(iframe)
は使っていないし・・・。
まずdriver.find_element_by_css_selector('#galaxyIframe')
が正常に動作しているのか・・・?
と思い検証したところAnalyticsにログインした直後からブラウザーとの接続自体が切れており、何の操作も受け付けられていなかったことが判明。
これは明らかにwebdriver自体がおかしいと思い、冒頭の「chromedriver.exe」の更新にたどり着いたということです。
すごい遠回りでしたねー。次からはまず最初にバージョン確認してみることにします!