アプリ版:「スタンプのみでお礼する」機能のリリースについて

webページの操作についての質問になります。
VBAでやりたいことです。
(1)webページを開き、指定したソースが表示されるまで、画面を更新
(2)ソース表示がされたら、指定したボタンをクリック
(3)画面が移行する
(4)移行したページの指定したボタンをクリック

不具合
(2)ボタンクリック後、ページは移行するが(4)のボタンが押せません。
しかし(3)のページを直接指定して開いた後に(4)の動作を行うときちんとボタンクリックが出来ます。
順番に(1)→(2)→(3)→(4)と処理を行うと(4)のボタンが押せないという状況です。

こんな感じで作成しました。
Dim objIE As InternetExplorer '
Set objIE = CreateObject("Internetexplorer.Application")
objIE.Visible = True
Dim strUrl As String
strUrl = "●●●●●●?sc_i=shp_pc_top_mdItemRanking_01"
objIE.navigate strUrl
Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE
Loop

(1)の処理
Do While (True)

If (TypeName(objIE.document.getElementsByClassName("●●●●")(0)) <> "Empty") Then
Set tmp = objIE.document.getElementsByClassName("●●●●")
flag = False
For Each t In tmp
If (InStr(t.getAttribute("class"), "●●●●") > 0) Then
t.Click
flag = True
Exit For
End If
Next
End If
If (flag = True) Then Exit Do
Application.Wait [Now() + "0:00:00.5"]
objIE.Refresh
Do
Loop Until (objIE.Busy = False) And (objIE.readyState = 4)
Loop


(3)の画面移行

(4)の処理
Set objINPUT = objIE.document.getElementsByTagName("INPUT")
 For n = 0 To objINPUT.Length - 1
If InStr(objINPUT(n).Value, "●●●●") > 0 Then
objINPUT(n).Click
Exit For
End If
Next

Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE
Loop
Set objINPUT = Nothing

以上になります。
お手数ですが、どなたかご教示をお願いいたします。

A 回答 (2件)

こんばんは。



新しい質問が出ましたが、こちらにレスを付けておきます。
一応、私は、このマクロは書けるレベルにはいるとは思っていますが、到底、それを公開する気にも実用する気にもなれません。一回失敗したので、もう一度やると、加算していくことに気が付きました。そんなリスキーなマクロを、ブラインドで自動化させるというのは、私のマクロの開発のポリシーにはありませんので、ご遠慮させていただきます。技術的なこととは、まったく違う次元の問題なのです。

アドバイスとしては、Wait の代わりに、私なら、APIのSleep を使います。
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)

例:
With objIE
  Set o_btnel = .document.getElementsByClassName("elCartButton elButton")
  Stop
  If o_btnel.Length > 0 Then
   o_btnel(0).Click
  Else
   MsgBox "ボタン取得に失敗", vbExclamation
   Exit Sub 'または元に戻る
  End If
   Do While .Busy Or .ReadyState <> 4: DoEvents: Loop
   Sleep 500
  
   If Instr(1,.LocationURL , 画面切り替わり後のキーワード, vbTextCompare) = 0 Then
   MsgBox "取得失敗", vbExclamation
    Exit Sub 'または別のステップ
   End If
End With
    • good
    • 0
この回答へのお礼

助かりました

ご回答ありがとうございます。
初心者の為、内容が難しくてよく理解できず申し訳ありません。
良くないことだとはわかりましたので
最初からもう一度勉強してみます。
今回はありがとうございました。

お礼日時:2017/01/04 01:26

同じ内容の質問が、OKWAVEにも出ていますね。


最初に、この数年、同じような質問を読んでみて言えることは、

strUrl = "●●●●●●?sc_i=shp_pc_top_mdItemRanking_01"

目的のサイトを公開しない質問は、私の中では、一度も成功したという記憶がありません。そのまま付き合って受け答えしても、徒労に終わるだけです。

プライベートな相談でしたら、もう少しクローズの場所のほうがよいと思います。

ざっとコードをみましたが、ただ、私とやり方が違うということだけで、間違いとも正解とも言えないのです。

>(2)ボタンクリック後、ページは移行するが(4)のボタンが押せません。
Set objINPUT = objIE.document.getElementsByTagName("INPUT")

たぶん、画面の切り替わりの認識が出来ていないのだろうと思います。
objIEのオブジェクト以下が切り替わったか、LocalURL や、もしく IEイベントをClassで作って取るか、どちらかでしょうね。
それ以上はなんとも言えません。
    • good
    • 0
この回答へのお礼

ご返信ありがとうございます。
どのようにしたら良いのかわからず悩んでいます。
再度質問させてもらいましたので、ご指導いていただけたら幸いです。
よろしくお願いいたします。

お礼日時:2017/01/03 12:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!