宝くじと過ごす日々

Excel,VBA,Radio,モキュメンタリー好き事務の活動記録です。

VBA×Selenium 郵便の追跡番号自動確認【上限1000個】

郵便の追跡番号大量確認用ツールを作りました。

VBAとSeleniumとChromeを使って、さまざまな自動化をしている人事部のたかはしです。

…まあ人事部ってのは嘘ですが、プログラミングとは全く関係のない仕事してます。

自動化は業務時間内に余裕がある時にやってます。

と、いうわけで適当に作って完成した郵便の追跡番号大量確認のツールを皆様に発表したいと思います。

上限は1000としてますが、実質無制限です。

サイト側の制限がかかったら使えないかもしれません、ご注意ください。

参考画像

f:id:osushidaisukikun:20210825163942j:image

標準コードに貼り付ける内容

Sub SearchNumbers()

'起動シートの初期処理ここから----------------

Set Thisbk = ThisWorkbook

Dim ms As Worksheet

Set ms = Thisbk.Sheets("main")

Dim N As String

Dim c As Long

Dim cnt As Long

Dim cntm As Long

'ここまで------------------------------------

 

'入力されている追跡番号の数をカウント
c = Application.WorksheetFunction.CountA(Range("C3:C1048576"))

'結果出力範囲の中身を全てクリア
ms.Range("D3:G1048576").ClearContents

'追跡サイトの1度の検索数が10個の為、10で割ってページを開く回数を計算
cnt = c / 10

'10で割った余りの数を計算
cntm = c Mod 10

 

'Seleniumの初期処理--------------------------

Dim Driver As New Selenium.WebDriver

Driver.AddArgument "--incognito" 'シークレットモード

Driver.AddArgument "disable-gpu"

Driver.AddArgument "start-maximized"

'Driver.AddArgument "headless" 'バックグラウンド処理

'Seleniumの初期処理ここまで------------------

 

'Chrome起動----------------------------------

Call Driver.Start("chrome")

' エラーが発生しても無視して処理を継続させる

On Error Resume Next

'それぞれの番号を入力

'ページを繰り返す数
Dim i As Long

'追跡番号の繰り返し(最大10回)
Dim p As Long

'10で割った数プラス1回ページを開く必要がある-------
For i = 1 To cnt + 1

'郵便追跡番号確認サイトを開く
Driver.Get "https://trackings.post.japanpost.jp/services/srv/search/input"

 

'追跡番号入力の繰り返し----------------------
For p = 1 To 10

'追跡暗号を格納&入力
N = ms.Cells((10 * i) - 8 + p, 3)

Driver.FindElementsByXPath("//*[@id=""content""]/form/div[1]/ul/li[*]/label/input")(p).SendKeys N

Next p

'追跡番号入力の繰り返しここまで--------------

 

'確認ボタンクリック
Driver.FindElementByXPath("//*[@id=""content""]/form/p[1]/input").Click

Driver.Wait 500

 

'確認結果の出力繰り返し----------------------
For p = 1 To 10

'最新年月日
ms.Cells((10 * i) - 8 + p, 4) = Driver.FindElementsByXPath("//*[@id=""content""]/form/div/table/tbody/tr[*]/td[3]")(p).Text

'最新状態
ms.Cells((10 * i) - 8 + p, 5) = Driver.FindElementsByXPath("//*[@id=""content""]/form/div/table/tbody/tr[*]/td[4]")(p).Text

'最新取扱局
ms.Cells((10 * i) - 8 + p, 6) = Driver.FindElementsByXPath("//*[@id=""content""]/form/div/table/tbody/tr[*]/td[5]")(p).Text

Next p
'確認結果の出力繰り返しここまで--------------

 

Next i
'10で割った数プラス1回ページを開く必要があるここまで-------

 

Driver.Close

MsgBox "完了"

End Sub

f:id:osushidaisukikun:20210825162951j:image