google drive apiを使えばドライブから間違えることなくファイルをダウンロードしたりアップしたりできるのですが、登録が面倒な人もいるはず。普通にChromeでマウスやキーボードでログインしてアクセスしていく作業をwebdriverを使って行っています。Microsoft Office製品だけでなくWebサービスも使って仕事する人は多いと思うので、webdriverは使えていたほうがいいですね。
1. Googleドライブであろうとブラウザ操作は通常のwebdriverで行うのと一緒
xpath指定してinputにユーザー名やパスワード入れてログインボタンクリックして・・・という動作はどこも一緒です。
今回もAutoIt WebDriver UDFを使ってやっていきます。
1.1 流れ
流れは以下のようになります。webdriver使って終わるとクッキーなどの情報がリセットされるので、立ち上げる毎にログインが必要になります。
裏技なのかわかりませんが、一度ログインした状態で強制的にwebdriverをシャットダウンさせると、前回の状態が残っていて次回起動するとログインした状態になります。
- ログインしていないかチェック
ログイン時、ドライブの上の検索ボックスが存在するかでチェック - ログイン画面のメールアドレスに入力
- 次へをクリック
- パスワードを入力
- 次へをクリック
- ログイン出来ていたら 検索ボックスが存在するかでチェック
2. Chromeなどで開発モード出してxpathを調べる
ChromeやFirefoxでマイドライブを開き、まずはログイン状態で検索ボックスのxpathを取得する。次にログアウトして、まっさらな状態のログイン画面、パスワード画面のそれぞれの要素xpathを取得していきます。
2.1 画面上部の検索input のxpathを取得
2020年1月現在、 $xpath=”//input[@id=’gs_taif50′]” です。

2.2 ログイン画面のメールアドレスinput、次へボタンのxpathを取得
メールアドレス欄 $xpath=”//input[@id=’identifierId’]”
次へボタン $xpath=”//div[@id=’identifierNext’]”
2.3 パスワード入力画面のxpath
パスワード欄 $xpath=”//input[@type=’password’]”
次へボタン $xpath=”//div[@id=’paswordNext’]”
3. 実装してみる
ログインしている状態で、開きたいフォルダのurlをコピーします。
例えば「マイドライブ/自分用フォルダ」のurlを。
ログイン後、そこに飛ぶようになります。
webdriverの基本は要素検索してアクションするの繰り返しです。
- 検索する要素のxpathを指定
- _WD_FindElement($sess, “xpath”, $xpath)で要素検索
- あれば _WD_ElementAction($sess, $elm, アクション)
3.1 Chrome WebDriver起動
起動方法は以前記事にしたので割愛。_WD_CreateSession()までコピペでOKです。
3.2 ログインしているか関数 func check_login($sess)
最初と最後で使うので関数にしておきましょう。check_login()とか。
ログインしているときにある「ドライブを検索」input要素が存在するかしないかでログインされているtrueか未ログインfalseを調べることにします。

Func check_login($sess) Local $xpath = "//input[@id='gs_taif50']" Local $elm = _WD_FindElement($sess, "xpath", $xpath) If @error Or $elm="" Then Return False EndIf Return True EndFunc
3.3 ログイン作業1 メールアドレス入力
メールアドレスinputをクリックしてアクティブに。そしてメールアドレスを入力という、人間ぽい動作を行います。

$xpath = "//input[@id='identifierId']" $elm = _WD_FindElement($sess, "xpath", $xpath) If @error Then Return SetError(1,0, "メールアドレスinput要素が見つかりません") EndIf ;クリックする _WD_ElementAction($sess, $elm, 'click') Sleep(2000) ;メールアドレスを入力 _WD_ElementAction($sess, $elm, 'value', "google@gmail.com") Sleep(2000) ;; 次へボタンをクリック $xpath = "//div[@id='identifierNext']" $elm = _WD_FindElement($sess, "xpath", $xpath) If @error Then Return SetError(1,0,"次へボタンが見つかりません") EndIf _WD_ElementAction($sess, $elm, 'click') Sleep(5000)
3.4 ログイン作業2 パスワード入力
先ほどと同じように、パスワードinputをクリックし入力、次へを押す。

;;先ほどのソースに続けて記載する $xpath = "//input[@type='password']" $elm = _WD_FindElement($sess, "xpath", $xpath) If @error Then Return SetError(1,0,"パスワードinputが見つかりません") EndIf ;クリックする _WD_ElementAction($sess, $elm, 'click') Sleep(2000) ;パスワードを入力 _WD_ElementAction($sess, $elm, 'value', "password") Sleep(2000) ;; 次へボタンをクリック $xpath = "//div[@id='passwordNext']" $elm = _WD_FindElement($sess, "xpath", $xpath) If @error Then Return SetError(1,0,"次へボタンが見つかりません") EndIf _WD_ElementAction($sess, $elm, 'click') Sleep(10000)
3.5 ログインされたかチェック check_login($sess)で
3.2で作成したcheck_login()を呼んでログインされているかチェックします。
4. Tips
基本_WD_LoadWait($sess)があり、ページ読み込み完了まで待てますが、人間っぽく操作するならこの後にSleep()をある程度ランダムな数字で入れていきましょう。SleepをランダムにするにはRandom()関数使いましょう。
あとは過度なアクセスはしないよう、ページアクセス_WD_Navigate()や_WD_ElementAction($s,$e,’click’)などはちょっと時間を置くように。
コメント