VBAで楽天ショップのシステムを作っているのですが、webbrowserコントロールを使い、ログインし、

受注画面へ行き、発送済みのリンクをクリックして、日付等選び、そこのデータをEXCELの方へ書きたいのですが可能でしょうか?またそういうことはしてもいいのでしょうか?

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2011/10/26 16:20:31
  • 終了:2011/11/02 16:25:03

回答(2件)

id:TransFreeBSD No.1

TransFreeBSD回答回数664ベストアンサー獲得回数2662011/10/27 14:58:28

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

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

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

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


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

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

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

他2件のコメントを見る
id:koonii26

回答ありがとうございます。

実際試したところ、エラーが起きたので探っています。

出来ましたら、再度評価します。

2011/10/27 19:32:54
id:koonii26

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

2011/10/28 14:12:15
id:TransFreeBSD No.2

TransFreeBSD回答回数664ベストアンサー獲得回数2662011/10/28 19:21:49

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
id:koonii26

回答遅れてすいません。

わざわざ詳しくありがとうございます。

参考に致します。

2011/10/31 10:46:40

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません