Excelからヤマト追跡画面操作 (2021年9月 新画面)
- (2021-09-28 16:28:36)
ヤマト荷物問合せ画面のリニューアル
9月20日前後、ヤマトの追跡画面が変更された。
荷物問合せ画面デザインへリニューアル
Excel VBAの書き直し
Excel内のヤマト伝票番号リストから、「荷物お問い合わせシステム」ページのフォームに伝票番号を連続自動記入し、その結果をまたExcelに書き戻すというExcel VBAで、荷物の配送状況を記録している。
このVBAがリニューアルで動作しなくなった。このVBAはだいぶん前に苦労して制作しただけに、また書き直しかと思うと、なかなか手が進まなかったが、昨日やっと重い腰を上げて書き直してみた。
Excel(読み込み) -> Web画面(書き込み)の部分
こちらはあまり変更がなく、今までのコードを数カ所直した程度で、そのまま動作した。
Web(読み込み) -> Excel(書き込み)
問題はこの部分。問合せ結果として表示されるWeb画面から欲しい情報を抽出し、Excelに書き込む。Webページからデータを取得する手法をWebスクレイピング(Web scraping)という。
Webスクレイピングのやり方がわからなくてはまった。
Webページからスクラップしたい情報は
(1) 「09/28」などの日付
(2) 「配送完了」などのステータス
以前は「 1件目」というワードの近くにそれらのデータがあった。tableタグで組まれた情報だったので、このワードの近くの「td」タグなどを調べていた。
新仕様ではtableタグは使用されなくなった。
その代わり、cssで特徴的なクラス名が与えられているので、
getElementsByClassName().innerText
で抽出することにした。
Webページのソースから日付・ステータス抽出
Dim class_date As String '日付
Dim class_num As String 'ヤマト伝票番号
Dim class_state As String '「配達完了」などのステータス
For n = 0 To 9
'Web問合せ結果を上から読み込み、
'日付データがないところで、Web読込み抜ける
If (IE.document.getElementsByClassName("data date")(n) Is Nothing) Then
Exit For
End If
class_date = IE.document.getElementsByClassName("data date")(n).innerText
class_num = IE.document.getElementsByClassName("tracking-invoice-block-title")(n).innerText
class_state = IE.document.getElementsByClassName("tracking-invoice-block-state-title")(n).innerText
'MsgBox class_date, vbOKCancel
'MsgBox class_num, vbOKCancel
'MsgBox class_state, vbOKCancel
'Excelのセルへ書込み
Cells(y, x + 1) = "'" & class_date
Cells(y, x + 2) = class_num
Cells(y, x + 3) = class_state
'Excelの一行書き終えたら、行を一段下げる
y = y + 1
Next n
<< SSLサーバ証明書と www ありなし問題< | >メールサーバの遅延 >>