実装はコピペだけでいけることもある
Outlookから社内スケジュールに予定を転記する工程を細分化し、工程をキーワードにWEB検索すると以下のことがわかりました。
一括抽出した情報は玉石混淆ですので、一度人間の目で精査する工程を追加することにしました。
従って、開発工程は下記のような流れとなります。
工程1はOutlookというパブリックなツールから、取得した情報をこれもパブリックなツールであるエクセルに貼り付けるプログラムですから、何も考慮しなくてもそのまま動くはずなので、理屈を理解する必要もありません。コピペでOKでした。
工程2はユーザにお任せします。
工程3は社内スケジュールはWebの入力フォームなので、エクセルのこのセルはこのフォームに入れるみたいなやり方で実現できました。
下記のサイトを参照し、少し変更しました。
Sub Hatena()
Dim Driver As New Selenium.WebDriver
Dim sKey As New Selenium.Keys
Dim elm As Selenium.WebElement
Dim word As String
Driver.Start "Edge", "https://it.ojisan999.com/"
Driver.Get "/"
word = Range("A2").Value
Set elm = Driver.FindElementByXPath("/html/body/div[2]/div/div/div/aside/div/div[2]/div[2]/form/input[1]")
elm.Clear
elm.SendKeys word
elm.SendKeys sKey.Enter
Driver.Close
Set Driver = Nothing
End Sub
実際にはフォームのXPath[]内の数字とセルのアドレス番号が順次数字が増えていく形式でしたので、forを使用しました。
XPathというのは初めて知ったのですが、Goolge Chromeを使えば簡単に取得できます。
- 調べたいフォームにカーソルを置いて、右クリックすると「検証」が表示される
- 表示をクリック
- 検証ツール(ディベロッパーモード)が開かれる
- フォームにカーソルを置いた状態で、ソース部分を右クリック
- 「コピー」>「完全なXPathをコピー」をクリック
- クリップボードに完全なXPathが保存される
- プログラムに貼り付ける
うまくページが落ち着くまで待ち時間が必要とか、一度クリックが必要など、サイトによってクセがあったりするので何度も実行しながら調整します。
一箇所状況によって、Web上のタブのURLが変化する部分がありました。ここは「必殺、メッセージボックス」による半自動化で対応しました。
このような内容でも1日作業ですが、初めてそれっぽいプログラムが動作して、嫌いな作業が楽になりました。このときはしっかり習得してない自分が、こんなコピペのプログラムを作っていいのかなと思ってました。
何個か作って分かりました。職業プログラマーじゃありませんから、業務改善レベルなら良いんです。挫折しないプログラミングというのが自分の中で定義されました。
考え方を少し変えると、プログラムに挫折というものはなくなります。