え~と、最近対応が冷たいと評判の三流プログラマーです
※冷たいと感じた方々、すみませんと冒頭で謝りつつ、
下記、いつものグダグタデバッグ動画です。
【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 を 入れて、デバッグする 三流な方法?
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
を
テストしてみます。
※実際のソースを送ってもらうと、話が早かったりもします。
※※でも、全部送られて 丸投げも イヤなんだろ?
まったく、難しいね三流プログラマーって・・・
>こちらもいろいろ調べましたところ
>添付しているもので、グレード検索ができるサイトと
>できないサイトがあるのがわかりました。
>
>それを下記に実際のものを明記しました。
>TOYOTAとDAIHATSUですが、
>この二つンの違いについて、思ったことは
>ページが変更後、ソースの内容がトヨタは
>同じで、ダイハツは違います。
>そこで、ページが変更後、ソースが違う場合の
>処理がわかりません。
>ご教授いただければ幸いです。
'**************************************************** ' 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")(4)Click 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