Senkeysがうまく動作しない

このQ&Aのポイント
  • VB.NETとWinXPとIEを使用してプログラムを作成しています。操作中にtext2のDATA2を飛ばしてしまったり、不要なリンクを押してしまったりすることがあります。これを防止する方法はありますか?効果のある対処方法を教えてください。
  • 操作中にtext2のDATA2を飛ばしてしまったり、不要なリンクを押してしまったりすることがあります。既に待機やスリープ処理を試しましたが、効果が限定的です。より効果的な対処方法を教えてください。
  • 操作中にtext2のDATA2を飛ばしてしまったり、不要なリンクを押してしまったりすることがあります。現在は待機やスリープ処理を使用していますが、効果的な対処方法があれば教えてください。
回答を見る
  • ベストアンサー

Senkeysがうまく動作しない。(追いつかない?)

VB.NET+WinXP+IEでプログラムを作っています。 ブラウザに表示されたテキストボックスにいろいろな データを貼り付けるソフトを作っているのですが、 IE.document.Forms(0).Elements("text1").focus() SendKeys.Send(DATA1) IE.document.Forms(0).Elements("text2").focus() SendKeys.Send(DATA2) ・ ・ ・ などと操作をしているのですが、 text2のDATA2を飛ばしてしまったり、関係ないリンク を押してしまったりするのですが、これを防止する方法はないでしょうか? Do While IE.Busy = True : Loop Do While IE.document.ReadyState <> "complete" : Loop や System.Threading.Thread.Sleep(300) などというのを入れてみたのですが、あまり効果がないようです。 停止する時間をすごく長くすると大丈夫なのですが、 かなりもたついた感じになってしまいます。 何か良い対処方法があったら教えて頂きたいです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

IE.document.Forms(0).Elements("text1").focus() の様にエレメントを捕まえているなら、 .valueで値を設定すればいいような気がしますが 勘違いコメントだったらすみません

関連するQ&A

  • WebBrowserについて

    Visual Studio 2008を使っています 途中で処理が停止しまい困っています デバックで一時停止をすると Do While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete System.Windows.Forms.Application.DoEvents() Loop この部分で作業が止まっています 何かいい方法はないでしょうか? ソースは下記の通りです WebBrowser1.Navigate(New Uri("http://※※※※※※※※※※※※)) Do While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete System.Windows.Forms.Application.DoEvents() Loop ______________________________ Threading.Thread.Sleep(1000)とか入れても止まってしまいます 秒数はいろいろ試しましたが駄目でした WebBrowser1.Navigate(New Uri("※※※※※※※※※※※※)) Threading.Thread.Sleep(1000) Do While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete System.Windows.Forms.Application.DoEvents() Loop

  • あるサイト(https://search.npb.go.jp/kanp

    あるサイト(https://search.npb.go.jp/kanpou/)の認証画面に自動的にID/PASSを入力して、自動的にログインするようなプログラムを作りたいのですが、ID/PASSの入力は問題無く行えるものの、ログインの際にエラー(予期しない操作により、処理中にエラーが発生しました。再度ログインを行ってください。)となります。何が悪いのでしょうか? 【ログイン部分のプログラム】 ieTarget = CreateObject("InternetExplorer.Application") ieTarget.Visible = TrueValue = KANPOU_ID .document.Forms(0).elements("password").Value = KANPOU_PASS .document.forms(0).elements.submit() ieTarget.navigate("https://search.npb.go.jp/kanpou/") Do While (ieTarget.busy) Loop Do While (ieTarget.document.ReadyState <> "complete") Loop With ieTarget .document.Forms(0).elements("uji.model.4.value_userId").Value =KANPOU_ID .document.Forms(0).elements("password").Value = KANPOU_PASS .document.forms(0).elements.submit() End With

  • UWSC(LIST選択できず)

    初心者です。 UWSCの自動化で上手くいかない所を、どなたか教えていただけないでしょうか? 内容はあるサイトにログオンした後、コンボBOXで選択する画面を自動化したいのですが上手くいきません。UWSCの記載は下記の通りです。 どなたかお分かりになる方よろしくお願いします。m(_ _)m ID = INPUT("貴方のIDは?") PW = INPUT("貴方のPWは?") IE = CREATEOLEOBJ("INTERNETEXPLORER.APPLICATION") IE.VISIBLE = TRUE IE.NAVIGATE("あるサイト") repeat sleep(0.1) until !ie.busy and ie.readystate=4 ie.document.forms[0].elements[2].value =ID ie.document.forms[0].elements[3].value =PW repeat sleep(0.1) until !ie.busy and ie.readystate=4 ie.document.forms[0].submit repeat sleep(0.5) until !ie.busy and ie.readystate=4 ret = IELINK(IE,"あるリンク") repeat sleep(0.5) until !ie.busy and ie.readystate=4 ie.document.forms[0].elements[0].VALUE ="あるコンボ選択肢" ↑ここだけ上手く動かないです。 ie.document.forms[0].elements[2].value ="01/02/2007" ie.document.forms[0].elements[3].value ="07/07/2007" repeat sleep(0.5) until !ie.busy and ie.readystate=4 ie.document.forms[0].elements[4].CLICK()

  • 「地図」で検索するにはどういう操作をすればいいので

    ヤフーのトップページから 値を入れて検索を押すまではできるのですが 「ウェブ」ではなく「地図」で検索するにはどういう操作をすればいいのでしょうか? Sub yahoo() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" Do While objIE.Busy = True DoEvents Loop Do While objIE.Document.ReadyState <> "complete" DoEvents Loop objIE.Document.forms(0).elements("p").Value = "東京" '‘「地図」をクリックする操作をしたい objIE.Document.forms(0).submit Set objIE = Nothing End Sub 宜しくお願いいたします。

  • VBA IEを操作。ファイルダウンロード

    IEを操作して、ファイルをダウンロードしようと思います。 色んなサイトからとってきて、使わせてもらっています。 '---------------------------------IEを開くときに使う Sub IE_OPEN(webUrl As String) Dim objShell Dim writesheet As Worksheet Dim n As Long Dim ID As String, Password As String Set objShell = CreateObject("Shell.Application") Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True ie.Navigate2 webUrl Do While ie.Busy Or ie.readyState <> 4 DoEvents Loop Dim objINPUT Set objINPUT = ie.document.getElementsByTagName("INPUT") 'ループで頭からテキストが 次へ を探す For n = 0 To objINPUT.Length - 1 '※ type="submitボタンなので、.InnerTextじゃなくて、.Valueです ※※注意 If InStr(objINPUT(n).Value, "ログイン") > 0 Then '文字列の中から見つけたら Worksheets("Sheet1").Activate Do While ie.Busy Loop objINPUT(n).Click '見つけたINPUTタグのオブジェクトをクリック Do While ie.Busy Loop Exit For End If Next Set objINPUT = Nothing 'オブジェクト変数解放 End Sub '------------------------------IEを開く(この段階では既に開いてあります。) Private Sub CommandButton1_Click() Do While ie.Busy Or ie.readyState <> 4 DoEvents Loop ie.document.all.ah_ehName.Value = Me.ComboBox1.List(Me.ComboBox1.ListIndex) 'ID Do While ie.Busy Loop Dim objINPUT Dim n As Long Set objINPUT = ie.document.getElementsByTagName("INPUT") For n = 0 To objINPUT.Length - 1 If InStr(objINPUT(n).Value, "ダウンロード") > 0 Then objINPUT(n).Click Do While ie.Busy Loop Exit For End If Next Do While ie.Busy = True DoEvents Loop SendKeys "%S", True'保存 Do While ie.Busy = True DoEvents '何もしないループ(笑) Loop SendKeys "%O",True'ファイルを開く? Do While ie.Busy = True DoEvents Loop 'ie.Quit End Sub ’==================- 面倒なので、IEはPublic変数として モジュールに書いています。 (色んなモジュールを経由する必要があるため、このような手段を取りました) SendKeysをIEに送るというのが出来ずに困っています。 ダウンロードというボタンを押してのダウンロードなので、 ダウンロード用のURL等は分かりません。 Excel2003を使っています。 どうにかSendkeysで出来ないでしょうか? もしくは、もう少し分かりやすい方法は無いでしょうか。 (ファイルを保存しますか?のダイアログの「保存」をクリックして  所定の場所におき、開きたい。 そのまま開くのでもいいけれど、動作が不安定になるのは困る) 以上、よろしくお願い致します。

  • オブジェクト変数または With ブロック変数が設定されていません。

    下記の様に組みましたが、下記の★印の所で止まる様な事があります。 毎回止まるわけではないのですが、止まる時に「オブジェクト変数または With ブロック変数が設定されていません。」と表示されますが、 原因は何か?どの様にすればいいのか?など詳しく教えてください。 よろしくお願いします。 Sub test() Dim objIE As Object Dim strCOMMENT As String Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://" While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop 'データをセットする 'htmlドキュメント フォーム(0番目) アイテムに転記(代入)する objIE.Document.forms(0).Item("username").Value = "11111" objIE.Document.forms(0).Item("password").Value = "11111" While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop objIE.Document.all.subm.Click While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop For Each link In objIE.Document.Links If link.href = "http://" Then link.Click End If Next While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop 'タイトル・コメントの読み込み strtitle = Sheets("sheet1").Range("k7") strCOMMENT = Sheets("sheet1").Range("k9") Application.WindowState = xlMinimized While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop objIE.Document.forms(0).Item("title").Value = strtitle objIE.Document.forms(0).Item("comment").Value = strCOMMENT While objIE.readystate <> 4 While objIE.busy = True DoEvents ' Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop objIE.Document.all.submit.Click While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop 'フォーム(0番目)を .Submit(確認) する objIE.Document.forms(0).getElementsByTagName("input")(11).Click '←★この部分で止まる時があります。 While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop For Each link In objIE.Document.Links If link.href = "http://" Then link.Click End If Next While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 7, Now()) Do While Now() < Wait_Time DoEvents Loop objIE.Quit '.Quitで閉じる End Sub

  • ネスケで文字化けするjavascript

    下記はenterキーを押した時に次のテキストボックスなどにフォーカスを移動するjavascriptです。しかし、ネスケだとテキストボックスに入力した文字が文字化けしてしまいます。 <!-- ns4 = (document.layers)? true:false ie4 = (document.all)? true:false function cf() { for (i = 0; i < document.forms[0].elements.length; i++) { if ((ns4) && (document.forms[0].elements[i].type != "hidden") || (ie4) && (document.forms[0].elements[i].type != "hidden" )) { document.forms[0].elements[i].focus() break } } } function keyDown(e) { if (ns4) {PKey=e.which; el = e.target.type ; sk = e.modifiers} if (ie4) {PKey=event.keyCode; el = event.srcElement.tagName; sk = event.shiftKey} if (PKey == "13") { if (el.toLowerCase() != "textarea") { keyDowntest(e) return false; } else { if ((ns4) && (sk == '4') || (ie4) && (sk)) { keyDowntest(e) return false; } } } } function keyDowntest(e) { for (var i = 0; i < document.forms[0].elements.length; i++) { if ((ie4) && (document.forms[0].elements[i] == event.srcElement) || (ns4) && (document.forms[0].elements[i] == e.target)) { if ((i + 1) == document.forms[0].elements.length) document.forms[0].elements[0].focus() else for (; i < document.forms[0].elements.length; i++) { if ((ns4) && (document.forms[0].elements[i+1].type != "hidden") || (ie4) && (document.forms[0].elements[i+1].type != "hidden" )) { document.forms[0].elements[i+1].focus() break } } break } } } document.onkeydown = keyDown if (ns4) document.captureEvents(Event.KEYDOWN) //-->

  • WebBrowserにてsubmitの前にnavigateしてしまう

    いつもお世話になっております。 VB2005ユーザーです。 WebBrowser内の"submit"を押したあと、違うページに行きたいのですが、 "submit"を押す前に"Navigate"で指定しているページに行ってしまいます。 このようなコードを書いています。 With WebBrowser1 .Navigate("最初のURL") Do While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete System.Windows.Forms.Application.DoEvents() Loop .Document.Forms(0).InvokeMember("submit") Do While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete System.Windows.Forms.Application.DoEvents() Loop .Navigate("次の指定URL") Do While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete System.Windows.Forms.Application.DoEvents() Loop 「指定URL」は"submit"により新しいHTMLが生まれるので、その後の作業のためにどうしても"submit"を押したいのですが、上のようなコードですと先に「指定URL」に行ってしまいます。 "submit"をクリックせず、無視してしまうのです。 Navigate("次の指定URL")を外せばクリックしてくれるのですが・・・。 WebBrowserを完全に待機させる方法などが必要なのでしょうか? 宜しくご教授のほどお願い致します。

  • ラジオボタンをクリックしたい

    ie操作です。宜しくお願いいたします。 郵便局の再配達の依頼をvbaで行おうとしているのですが ラジオボタンにチェックする方法がわかりません。 「簡易・記録」にチェックを入れたいです。 https://trackings.post.japanpost.jp/delivery/delivery_request.do のソースを見ると、 <DIV><FONT class="explain_font_normal"> <input type="radio" name="mailTypeCode" value="13">簡易・記録 </FONT></DIV> となっているので Sub test1() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate "https://trackings.post.japanpost.jp/delivery/delivery_request.do" objIE.Visible = True Do While objIE.Busy = True DoEvents Loop Do While objIE.document.ReadyState <> "complete" DoEvents Loop objIE.document.forms(0).elements("mailTypeCode") = 13 objIE.document.all("mailTypeCode").Value = 13 objIE.document.all.forms(0)("mailTypeCode").Value = 13 Set objIE = Nothing End Sub としてみましたが、どれもダメでした。 宜しくお願いいたします。

  • VBA・WebBrowserコントロールで全て自動の話ですが、ボタンをクリック→ページ移動→テキストボックスに入力ができません。

    宜しくお願い致します。 WebBrowserコントロールで表示されたページのボタンをクリック(自動)→ページ移動後→テキストボックスに自動で入力ができません。 コードはこのように書いています。 .Document.all.****.Click Do While .ReadyState <> 4: DoEvents: Loop .Document.all.********.Value = "*****" 以前はIEの表示タイミングとテキストボックスへの入力のタイミングがズレている為にエラーが発生してしまうと思っていましたが、“sleep”などを使って試した結果、仮説がハズレている事が分かりました。 ステップインで調べていくと“ボタンクリック”の後“Do~Loop”のところで停止してしまい“F8キー”を何度押してもそのままの状態で、コード部分をクリックしたり、表示されている“IE”の部分をクリックした後に再度“F8キー”を押すと続いて処理が行われる形となっています。 現状では“フォーカス”の関連かとも思ったのですが、見当が付かない状態です。 何かご存知の方がおられましたら、アドバイスをお願いできたらと思っております。 是非、宜しくお願い致します。