Pythone x seleniumを使ってGoogleカレンダーにicsファイルをインポートしたい

01_効率化

スケジュール管理は紙でした方が良いとはよく言いますが、情報共有ツールとしては有用ですのでカレンダーアプリはまだまだ使える道具だと確信しています。

そんな中、情報共有がしやすいプラットフォームってGoogleカレンダーなんですよね。

Appleの標準搭載のカレンダーも優秀ですが、Googleほどオープンではないです。

日本で人気が出てきたTimeTreeはGoogleから情報を取ることはできても、Googleにデータを共有するところまでは対応していません。

そんな中、データのエクスポートは対応しているんだけれど、(拡張子が)ics形式のファイルとして出力される程度のサービスもまだまだ多くあります。

ただ、icsファイルは一時的な情報であり、更新頻度が自分の手作業に寄って変化する。

絶対に3日坊主・・・いや、1回やって終わりで使わなくなります。

そういった面倒は作業はプログラムにやらせましょうという話です。

そうそう、seleniumで動かすのはChromeを操作します。


設定の話は今後アップするとして。

さらっと参考になるコードを紹介します。

from selenium import webdriver
import time
from pathlib import Path
from selenium.webdriver.common.keys import Keys
import os

# google スケジュール
gmail_add = "googleで利用しているメールアドレス"
gmail_pw = "googleで利用しているパスワード"

# ics file path ファイルの場所を指定
file_path = r"C:\Users\Administrator\Downloads\スケジュール.ics"

# chromeドライバーのパスを指定
chrome_driver_path = "C:\Development\chromedriver.exe"
# 操作するブラウザを選択 引数としてドライバーのパスを渡す
driver = webdriver.Chrome(executable_path=chrome_driver_path)

# export Display
driver.get("Googleスケジュールにログインした後、[設定]->[インポート/エクスポート]画面のURLを貼り付けます")
# input MailAddress
driver.find_element_by_xpath('//*[@id="identifierId"]').send_keys(gmail_add)
time.sleep(1)
# next click
driver.find_element_by_xpath('//*[@id="identifierNext"]/div/button/span').click()
time.sleep(3)
# input gmail password
driver.find_element_by_xpath('//*[@id="password"]/div[1]/div/div[1]/input').send_keys(gmail_pw)
time.sleep(1)
# next click
driver.find_element_by_xpath('//*[@id="passwordNext"]/div/button/span').click()
time.sleep(7)

# インポートファイルを選ぶ箇所に直接ファイルパスを投げる
driver.find_element_by_xpath('//*[@id="YPCqFe"]/div/div/div/div[1]/div[1]/div/form/label/input').send_keys(file_path)

# データ処理待ちの時間なので任意で変更してください
time.sleep(60)
# delite ics file
os.remove(file_path)

driver.quit()

人によっては色々言いたいことはあるかもしれませんが、ざっくり説明しますと。

メールアドレスとパスワードはプログラムの中に書いちゃって、変更とかあるとめんどくさかったり、このコードが書かれたデータが流出した場合、セキュリティ上問題があるので取り扱いは注意です。

ファイルパスの場所を指定するという意味が分からない場合はある程度調べてほしいのですが、

これですね、ファイルパスを調べたいファイルを[右クリック]->[プロパティ]->[セキュリティ]tabに書かれているオブジェクト名

要するにファイルのある場所ですね。

# export Display からの塊はseleniumの機能を使っています。

まずは表示させたい画面のURLを取ってきてもらって貼り付けてください。

あとは、time sleepを使って少し待ち時間を設けて、xpath指定でクリックする場所を選んだりしています。

# インポートファイルを選ぶ箇所に直接ファイルパスを投げる  この個所はたぶん自作すると一番つまずくところだと思います。

Chormeブラウザを選択してF12を押すか、右クリックから[検証]を選択することで、なんの画面かわかりませんが、何か表示されますよね?

※CSS?HTML?おそらく表示に関わる言語で書かれているのだと思いますが、フロントエンドの知識は紙きれほどしかないで勘でやってます。

大体seleniumeでブラウザの場所を指定するときはXPath!ってバカの一つ覚えでやってますが、大体通用します。

追加表示された箇所の左上[赤枠箇所]をクリックすると、ブラウザ上どこかを選択するとそこの表示に関するコードをハイライトしてくれます。※もう1つ上の画像です。

インポート周辺をハイライトさせてみるとわかるのですが。

<input type~~~~の箇所はハイライトされません。

おそらく”input”がキーワードなんでしょうね。 ←はよCSSとかの勉強しろやって自分で思います。

で、ここを右クリックして[Copy]->[Copy XPath]でとれた文字列を使って場所を指定・・

ファイルパスを投げて最後にインポートボタンをクリック。

データのインポートが完了するまで待って。

インポート済みのデータを消して。

ブラウザを閉じる。


また後で、追記します。時間が押してますので。

コメント

タイトルとURLをコピーしました