< | >

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 ありなし問題< | >メールサーバの遅延 >>
search
layout
admin

[▲page top]