人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

VBAで楽天ショップのシステムを作っているのですが、webbrowserコントロールを使い、ログインし、
受注画面へ行き、発送済みのリンクをクリックして、日付等選び、そこのデータをEXCELの方へ書きたいのですが可能でしょうか?またそういうことはしてもいいのでしょうか?

●質問者: たつ
●カテゴリ:コンピュータ インターネット
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● TransFreeBSD

楽天ショップの運営などしたことありませんから、画面構成が全く分かりませんが、

読み込み完了毎にURLや内容から各ページを特定し、必要な操作や情報の取得を行えます。

「日付等選び」は、どう選ぶのか分かりませんが、DOMにイベント登録も出来たはずですので、クリックでコピーとかも可能でしょう。

ただ、ログインはやっぱりユーザにしてもらった方が安心かもしれません。


規約などは分かりませんが、完全自動ででもなければ禁止までするのは難しいと思います。

(専用でもブラウザに違いはないですから、通常のブラウザとの境は曖昧です)

パスワードの管理については何か文言があるかもしれません。


たつさんのコメント
教えていただいたリンク先のはVBやc#なので気にしなかったのですが、EXCELVBAでのサンプルがあれば教えて欲しいです ログインは特殊なので手動でお願いしたいと思います。 リンクをクリックし、ステータスをボタンで選び、日付をプルダウンメニューで選ぶ形です。

TransFreeBSDさんのコメント
excelでしたね。 http://www.ken3.org/cgi-bin/group/vba_ie_object.asp http://d.hatena.ne.jp/language_and_engineering/20090710/p1 こんなところでしょうか。 基本的にはDOMの操作なので、javascriptみたいな感じになると思います。 ただ、VBAだとイベント処理が微妙かも。最悪インターバルタイマで監視かもしれません。

たつさんのコメント
回答ありがとうございます。 実際試したところ、エラーが起きたので探っています。 出来ましたら、再度評価します。

たつさんのコメント
getElementById で、オブジェクトが必要ですと出て、ひっかかってしまうのですが、調べても原因がわからないので教えて欲しいです

2 ● TransFreeBSD

getElementById で、オブジェクトが必要ですと出て、ひっかかってしまうのですが、

これだけだと何もわからないですね。とりあえず

http://d.hatena.ne.jp/language_and_engineering/20090710/p1

の「素の関数を使う場合」のは動くことを確認しました。


基本的に、各オブジェクトの詳しい解説などはほとんどありません。

ただ、基本DOM的なので、情報の多いjavascriptのDOM操作が参考になります。

.Net関係も基本は同じですから参考になると思います。

プロパティ、メソッド、イベントをオブジェクトブラウザでブラウズして、名前や短い説明を元に機能を推理してください。

このあたりは三流君のサイトが詳しいです。

イベント処理とかインターバルタイマとかもありますが、VBAでは独特な感じがあります。

このあたりは慣れと勘が必要かもしれません。

あとは、ググったり試行錯誤したりでやっていくしかなさそうな気がします。


イベントとインターバルタイマベースでちょっとサンプル作ってみました。

ただしエラー処理がないです。

通常の標準モジュールではなくThisWorkbookに入れてください。

参考:http://www.ken3.org/vba/backno/vba108.html

Option Explicit
' http://www.ken3.org/vba/backno/vba108.html
' IEのイベント処理を可能にする(SHDocVwライブラリ)
Dim WithEvents ie As InternetExplorer
' select要素のイベント処理を可能にする(MSHTMLライブラリ)
Dim WithEvents sl As HTMLSelectElement

Sub IE操作()
  ' IEを立ち上げる
 Set ie = CreateObject("InternetExplorer.Application")
 ie.Visible = True
 ie.Navigate "http://q.hatena.ne.jp/"
  ' インターバルタイマもどきを開始する
 onTimeSub
End Sub

Sub onTimeSub()
  ' インターバルタイマもどき。エラー処理をきっちりやらないと途絶えると思う。
  ' IE終了により変数ieがNothingになっていたらインターバルタイマを終了する
 If ie Is Nothing Then
 Exit Sub
 End If
  ' 人力検索トップなら質問入力用textarea(name=content)の内容をセルに
 If ie.LocationURL = "http://q.hatena.ne.jp/" Then
 Cells(2, "A").Value = ie.Document.getElementById("content").Value
 End If
  ' 次のタイマ登録。ここまででエラーが発生すると途絶える。
 Application.OnTime EarliestTime:=Now + TimeValue("00:00:05"), Procedure:="ThisWorkbook.onTimeSub"
End Sub

Private Sub ie_OnQuit()
  ' IEイベントハンドラ:終了
  ' インターバルタイマ終了用にIEが終了したら変数ieをNothingにする
 Set ie = Nothing
End Sub

Private Sub ie_DocumentComplete(ByVal pDisp As Object, URL As Variant)
  ' IEイベントハンドラ:ページ表示完了
  ' ページ読み込みが完了したらURLから各種処理へ分岐する
 Select Case URL
 Case "http://q.hatena.ne.jp/list/computer"
 dc_Computer pDisp
 Case Else
 dc_Other pDisp
 End Select
End Sub

Private Sub dc_Other(pDisp As Object)
  ' その他のページ
End Sub

Private Sub dc_Computer(pDisp As Object)
  ' コンピューターカテゴリ
 Dim obj As Object
  ' 最初の質問を抽出
 Set obj = pDisp.Document.getElementById("section-body") _
 .getElementsByTagName("li")(0)
  ' 質問文
 Cells(1, "A").Value = obj.getElementsByTagName("a")(0) _
 .innerText
  ' ユーザー名
 Cells(1, "B").Value = obj.getElementsByTagName("a")(1) _
 .innerText
  ' イベント用にカテゴリ選択セレクタを抽出セット
 Set sl = pDisp.Document.getElementById("listcategory") _
 .FirstChild()
End Sub

Private Sub sl_onchange()
  ' select要素イベントハンドラ:選択変更
  ' カテゴリ選択を行うと呼ばれる。ただしコンピューターカテゴリでのみ。
 Cells(2, "B").Value = sl.Value
End Sub

たつさんのコメント
回答遅れてすいません。 わざわざ詳しくありがとうございます。 参考に致します。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ