三流君 ken3のmemo置き場

三流プログラマーのメモ書きです。主にVBAやWindowsの話題が多いです

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。

よく検索されるキーワード: [質問回答XXXXさんへ] [CreateObject] [VBA] [JRA競馬オッズ]

XXXXXさんへ IE操作 msgBox を 入れて、デバッグする 三流な方法?

え~と、最近対応が冷たいと評判の三流プログラマーです
※冷たいと感じた方々、すみませんと冒頭で謝りつつ、

下記、いつものグダグタデバッグ動画です。
【VBA IE操作】デバッグでMsgBox を 入れて、デバッグする 三流な方法? 【三流君】 - YouTube
www.youtube.com


下記のような質問をいただきました。

>http://inquiry.daihatsu.co.jp/gradeweb/default.aspx
>ダイハツのグレード検索で、
>最初の同意するのボタンを押した後の
>テキストへ2か所Tableタグで取得できたのですが、
>マクロで再起動させるとタグが見つからずエラーがしまい、
>対策の方法
>がわかりません。ご教授いただけると幸いです。

で、
問題の
私が書いた冷たい返信が ぉぃぉぃ

こんにちは。

http://inquiry.daihatsu.co.jp/gradeweb/default.aspx
を軽くしか見ていませんが、
初めてとんだときは、
同意画面が出て、
ボタンを押すと、URLが変わらず画面内容が変化するみたいなので、
ボタンを押した後の待ち方?
向こうの同意処理になにか細工があるのかもしれません・・・

>最初の同意するのボタンを押した後の
>テキストへ2か所Tableタグで取得できたのですが、
>マクロで再起動させるとタグが見つからずエラーがしまい、

>最初の同意するのボタンを押した後
Msgbox "test" '手動でまず止めてみる
その語のマクロで
>のテキストへ2か所Tableタグで取得
できたなら、

のように、同意ボタンを押した後、テストで止めてみて、
続きのマクロで データが取得できるなら、
同意後の処理待ちかなぁと思いますが、

ズバリの解決策、回答じゃなく、
エラーの原因は安易に処理待ちなのでは?の回答で
申し訳ないです。

解決策の糸口となれば幸いです 三流プログラマー Ken3
※自動操作対策で何かされていたらいやだなぁと思いつつ失礼します。。。

冷たい回答者だなぁ・・・
最近また 腰高になっていて、同じ目線で質問に真摯に向き合っていないよね・・・

で、しばらくすると、
下記のように、
実際のコードが送られてきたので、
今回の動画ネタ、

IE操作 msgBox を 入れて、デバッグする 三流な方法?
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

テストしてみます。

※実際のソースを送ってもらうと、話が早かったりもします。
※※でも、全部送られて 丸投げも イヤなんだろ?
   まったく、難しいね三流プログラマーって・・・


>こちらもいろいろ調べましたところ
>添付しているもので、グレード検索ができるサイトと
>できないサイトがあるのがわかりました。
>
>それを下記に実際のものを明記しました。
>TOYOTADAIHATSUですが、
>この二つンの違いについて、思ったことは
>ページが変更後、ソースの内容がトヨタ
>同じで、ダイハツは違います。
>そこで、ページが変更後、ソースが違う場合の
>処理がわかりません。
>ご教授いただければ幸いです。

'****************************************************
'   DAIHATSUの場合
'****************************************************
Sub DAIHATSU()

    Dim objIE As InternetExplorer 'IEオブジェクトを準備
    Set objIE = CreateObject("Internetexplorer.Application") '新しいIEオブ
ジェクトを作成してセット


    objIE.Visible = True 'IEを表示
    objIE.navigate "http://inquiry.daihatsu.co.jp/gradeweb/" 'IEでURLを開く

    Do While objIE.Busy Or (objIE.readyState <> 4): DoEvents: Loop

    objIE.document.getElementById("ctl00_ContentPlaceHolder1_Button4").Click

    '表示終了まで待つ .Busy(忙しい)間 と.ReadyState(ステータス)が4以外の時
ループ
    Do While objIE.Busy = True
        DoEvents  '特に何もしないで.Busyの状態が変わるまで待つ
    Loop
    Do While objIE.readyState <> 4
        DoEvents  '特に何もしないで.ReadyStateの状態が4に変わるまで待つ
    Loop

    	'*****************************************************
	'ここまではうまく動いています。
	'ここからいろいろやったのですが、タグNAMEやIDなどでもうまくいかな
い。
	'*****************************************************

    objIE.document.getElementsByTagName("input")(2).Value = " AWS210 "  '
なお、これは、トヨタの車番なので、検索後該当なしがでも問題ないです。
    objIE.document.getElementsByTagName("input")(3).Value="987654"
   objIE.document.getElementsByTagName("input")(4Click

    Set objIE = Nothing

End sub


デバック1.テストでMSGBOXを入れる

Msgbox で 処理を止めて、
エラーの原因が
ページ遷移なのか?
探ってみました。
※よく使う 三流な方法ですが、
 簡単なので、だまされたと思って 使ってみてください。

Option Explicit

'****************************************************
'   DAIHATSUの場合
'****************************************************
Sub DAIHATSU()

    Dim objIE As Object 'IEオブジェクトを準備
    Set objIE = CreateObject("Internetexplorer.Application")
    '新しいIEオブジェクトを作成してセット

    objIE.Visible = True 'IEを表示
    objIE.navigate "http://inquiry.daihatsu.co.jp/gradeweb/" 'IEでURLを開く
    
    Do While objIE.Busy Or (objIE.readyState <> 4): DoEvents: Loop

MsgBox "同意画面"

    objIE.document.getElementById("ctl00_ContentPlaceHolder1_Button4").Click

MsgBox "クリック後 test"

    Do While objIE.Busy Or (objIE.readyState <> 4): DoEvents: Loop

    '*****************************************************
    'ここまではうまく動いています。
    'ここからいろいろやったのですが、タグNAMEやIDなどでもうまくいかない。
    '*****************************************************

    objIE.document.getElementsByTagName("input")(2).Value = " AWS21110 "    '
'なお、これは、トヨタの車番なので、検索後該当なしがでも問題ないです。
    objIE.document.getElementsByTagName("input")(3).Value = "1237654"
    'objIE.document.getElementsByTagName("input")(4).Click

    Set objIE = Nothing

End Sub

デバッグ2.クリック後に処理待ちを入れて、みる

.Click後に少し あいだ間隔をあけたかったので、

objIE.document.getElementById("ctl00_ContentPlaceHolder1_Button4").Click
Application.Wait (Now + TimeValue("0:00:01")) '一秒待つ

と、
Application.Wait
を入れて、処置してみました。

Option Explicit

'****************************************************
'   DAIHATSUの場合
'****************************************************
Sub DAIHATSU()

    Dim objIE As Object 'IEオブジェクトを準備
    Set objIE = CreateObject("Internetexplorer.Application")
    '新しいIEオブジェクトを作成してセット

    objIE.Visible = True 'IEを表示
    objIE.navigate "http://inquiry.daihatsu.co.jp/gradeweb/" 'IEでURLを開く
    
    'Application.Wait (Now + TimeValue("0:00:05")) '5秒待つ

    Do While objIE.Busy Or (objIE.readyState <> 4): DoEvents: Loop

'MsgBox "同意画面"

    objIE.document.getElementById("ctl00_ContentPlaceHolder1_Button4").Click

    Application.Wait (Now + TimeValue("0:00:01")) '一秒待つ

'MsgBox "クリック後 test"

    Do While objIE.Busy Or (objIE.readyState <> 4): DoEvents: Loop

    '*****************************************************
    'ここまではうまく動いています。
    'ここからいろいろやったのですが、タグNAMEやIDなどでもうまくいかない。
    '*****************************************************

    objIE.document.getElementsByTagName("input")(2).Value = " AWS21110 "    '
'なお、これは、トヨタの車番なので、検索後該当なしがでも問題ないです。
    objIE.document.getElementsByTagName("input")(3).Value = "1237654"
    'objIE.document.getElementsByTagName("input")(4).Click

    Set objIE = Nothing

End Sub


※下記、冒頭の解説動画と同じです
www.youtube.com
【VBA IE操作】デバッグでMsgBox を 入れて、デバッグする 三流な方法? 【三流君】 - YouTube

Ken3 ホームページ 目次

分類:HPを大きく分けると4つの柱(分類)です。

  1. [VBA・マクロ プログラミング]の解説
    当店の人気はVBA系のCreateObject("XXXXXX.application")で他のアプリケーションを操作するサンプルが人気です
  2. [プログラマーの愚痴]では、あまり見せたくない三流プログラマーの内面かな。
    三流君を踏み台にする
  3. [古いクラシック ASP(Active Server Pages)]の解説。
  4. [元コンビニ店長時代の話]が弟に巻き込まれ、失敗した脱サラ、畑違い?の仕事で失敗。
主に上記4つの分類でHP作成やメルマガの発行を行ってます。
※更新頻度が落ちていて情報の鮮度が悪いです。



本当に三流なんです(笑):たまにスゴイですねなんて言われることもありますが、
真実は→ [三流君の真実は...] ←を初めに見てくださるとわかると思います。
(からくりは、成功例↑しか載せてなくて ヒドイ失敗例はお蔵入り迷宮入りが多かったりします)