【前回の記事】
⇒ショッピーズへの出品を自動化するVBAプログラムを組んでみる①
今回からは出品ページ上の項目に対して、実際にデータをセットしていきます。
まずは簡単そうな「商品名」、「商品説明」、「商品価格」の3つから入力していきます。
入力項目に値をセットする
まずはそれぞれの入力箇所のHTMLソースを確認します。
●商品名
どれもinputタグでidが設定されていますね。「getElementbyId」を使って直接操作できそうなので、それぞれ適当に値をセットしてみます。
'----------------------------------------------------------------- 'ショッピーズの出品ページにデータを自動入力させる処理 '----------------------------------------------------------------- Sub main() Dim objIE As InternetExplorer Set objIE = getRunningIE("", DOMAIN_SHOPPIES) objIE.Navigate2 URL_SHOPPIES_EXHIBIT waitBrowseLoading objIE '商品名をセット objIE.document.getElementById("titleInput").Value = "商品名Test" objIE.document.getElementById("explanation").Value = "商品説明Test" objIE.document.getElementById("inputPrice").Value = "7777" End Sub
※関数や変数の定義については前回の記事の続きとなっています。
とりあえずこんな感じで実行してみます。
【実行結果】
ちゃんとそれぞれの入力箇所に値がセットできましたね。
ただよく見ると、商品価格欄の下にある「決済手数料」と「付与予定売上」が0のままとなっています。
これは他のフリマサイトでも起きた現象ですが、恐らくjQueryのkeydownイベントあたりで検知しているからだと思われます。
キーボード操作に反応して入力されたかどうかの検知を行い自動的に手数料計算等を行うのが本来の動きですが、プログラムから値を直接セットした場合は検知ができないので自動計算が行われないのです。
しかし、特に問題はありません。
試しに他の項目を設定して確認ボタンを押した所、正常に確認画面に遷移することを確認しました。
メルカリの場合だとイベントを発生させた際に入力内容をどこかに保存している様で、保存処理が行われないと値をセットしても無効になってしまうため仕方無くSendKeysを使って無理矢理イベントを発生させていたんですが・・・
ショッピーズはそこまで対策はされていない様ですね。
この仕様はこちらとしてはありがたいです。
ということで3つの入力項目については僅か3行で終了しました。
カテゴリを設定する
続けてカテゴリの設定を行います。
今回は、
「ファッション」⇒「トップス」⇒「Tシャツ(半袖/ノースリーブ)」
という順番にカテゴリを設定していきたいと思います。
まず商品説明の入力箇所の下にある「カテゴリを選択する」ボタンを押すと、以下の様なフォームが出現します。
では早速、画面上の1つ目のカテゴリで「ファッション」を選択してみたいと思いますので、HTMLソースを確認してみましょう。
赤枠部分の「ファッション」という文字が見えるアンカータグが目的の要素の様です。リンクになっているのなら話は早いですね。
早速クリックする処理を~・・・と思ったらこのタグにはidが無いため、今までの様に1行で処理を行うという訳にはいきません。
この出品ページ全体からアンカータグを丸ごと抽出してクラス名とインナーテキストで一致するものを検索していっても良いのですが、idと違ってどちらも一意の値とは限らないため、『全く同じクラス名と全く同じインナーテキストを持つ要素』が他にも存在するかもしれません。その場合は間違って別のリンクをクリックしてしまう可能性があります。
そういった誤操作の可能性は極力排除していきたいので、以下の様な形で処理を組みます。
Dim objDiv As Object Dim objAnchorAll As Object Dim objAnchor As Object '~~~~~途中の処理は割愛~~~~~ '第一カテゴリのクリック objIE.document.getElementById("categoryChoice").Click Sleep 2000 Set objDiv = objIE.document.getElementById("mCSB_1_container") Set objAnchorAll = objDiv.getElementsByTagName("a") For Each objAnchor In objAnchorAll If Trim(objAnchor.innerText) = "ファッション" Then objAnchor.Click Exit For End If Next
まずHTMLソースをみて見ると、該当のリンク部分は色んなタグの子要素になっているのが分かりますね。
その中でも最も目的のリンクに近い、直近の親要素である「mSCB_1_container」というidを持ったdivタグを取得し、このタグの範囲にあるアンカータグを抽出します。
ちなみにこの「mSCB_1_container」というidを持つdivタグが、見た目上どの辺りの部分になるかというと・・・
大体赤く塗った部分の辺りになります。
ここまで絞り込んでいればさすがに同じテキストを持つリンクの誤クリックも無いと思います。
ということで上の処理を追加して実行してみると、カテゴリ選択フォームが開いて1番目の「ファッション」カテゴリを選択する部分まで動作するのが確認できると思います。
では同じ要領で残りの第二カテゴリ、第三カテゴリも選択していきましょう。
'第二カテゴリのクリック Sleep 1000 Set objDiv = objIE.document.getElementById("mCSB_2_container") Set objAnchorAll = objDiv.getElementsByTagName("a") For Each objAnchor In objAnchorAll If Trim(objAnchor.innerText) = "トップス" Then objAnchor.Click Exit For End If Next '第三カテゴリのクリック Sleep 1000 Set objDiv = objIE.document.getElementById("mCSB_3_container") Set objAnchorAll = objDiv.getElementsByTagName("a") For Each objAnchor In objAnchorAll If Trim(objAnchor.innerText) = "Tシャツ(半袖 / ノースリーブ)" Then objAnchor.Click Exit For End If Next
先程の第一カテゴリのクリック処理をコピーし、id「mCSB_1_container」の数字部分を「2」、「3」と修正していくだけです。
後はクリックしたいカテゴリ名の判定部分を修正して終わりです。
思った以上に簡単でしたね。
強いて言えば、このままのプログラムだとほぼ同じ内容の処理が連続して記述されることになるため、クリック処理の部分は関数化しておいた方が良いと思います。
そうするとプログラムの行数も減って見やすくなりますからね。
他の「状態」や「配送方法」についても同じ考え方でいけそうなので、後の項目は特に解説する必要は無さそうですね・・・
今回はこの辺で、次は画像の登録処理部分の作っていきたいと思います。
【次の記事】
⇒ショッピーズへの出品を自動化するVBAプログラムを組んでみる③
※近日中に公開