動作環境:
OS: Windows7 32bit
開発環境: Access2010 VBA
操作対象:IE9
いつもお世話になっております。
IEにて、コマンドボタンクリック後に、
処理を実行して良いのか確認するダイアログが表示されるサイトがありまして、
確認ダイアログのOKボタンを押せずに困っております。
動作イメージとしましては、このサイトでOKボタンを押して、その後のダイアログのOKボタンを押したいです。
http://kamicha1.web.fc2.com/Excel/Test20090726.html
このサイトでは、OKボタンにID名が設定されていますが、
実際に押したいサイトでは、ID名が設定されていません。
サンプルサイトのHTMLが<変更後>のパターンの場合には、
どのように指定すると「.click()」を実行できますか?
<変更前>
<input type="submit"value="OK"class="bt2"id="popOK"onclick="return pdf();">
<変更後>
<input type="button"value="OK"name="popOK"onclick="return pdf();">
このサイトに対応するサンプルプログラムは以下のようになっています。
(このプログラムを起動すると、IEでOKボタン、確認ダイアログのOKボタンが押されてPDFが表示されます。)
【サンプルコード】
Private Declare PtrSafe Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, ByVal lParam As LongPtr) As Long Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Private Declare Function FindWindow Lib "User32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Const WM_COMMAND As Long = &H111& Sub ie_CommandStateChange() Dim hwnd As Long Dim ie As InternetExplorer Dim a As Long, b As Long Dim objtag As Object Dim i As Long Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True ie.Navigate "http://kamicha1.web.fc2.com/Excel/Test20090726.html" Do While ie.Busy Or ie.ReadyState < 4 DoEvents Loop Set objtag = ie.Document.getElementsByTagName("INPUT") For i = 0 To objtag.Length - 1 If objtag(i).Value = "OK" Then ie.Document.Script.setTimeout "javascript:document.getElementById('popOK').click()", 200 Sleep 1000 hwnd = FindWindow("#32770", "Web ページからのメッセージ") If hwnd <> 0 Then Debug.Print hwnd, ie.hwnd PostMessage hwnd, WM_COMMAND, vbOK, 0 End If Exit For End If Next i End Sub
【サンプルサイトのHTML】
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=Shift_JIS"> <meta http-equiv="content-style-type" content="text/css"> <meta http-equiv="content-script-type" content="text/javascript"> <script language="JavaScript"><!-- //PDF表示確認POPUP function pdf(url) { a=confirm('PDFを表示します。'); if(a) location.href='a.pdf'; else alert('なにもしません'); } // --></script> <title>VBA</title> </head> <body> <!--表示ボタン--><table border="0"width="100%"class="popBtn"><tr><td align="center"><input type="submit"value="OK"class="bt2"id="popOK"onclick="return pdf ();"></td></tr></table> <!--表示ボタン--><input type="hidden"name="analysisPrevActionId"value="SATCB01J"> <!--コンテンツ--><script type="text/javascript"> <!-- var fc2footerparam = 'charset=' + (document.charset ? document.charset : document.characterSet) + '&url=' + document.location + '&service=0&r=' + Math.floor (Math.random()*99999999999); var fc2footertag = '<' + 'script src="http://vip.chps-api.fc2.com/apis/footer/?' + fc2footerparam + '" charset="UTF-8"><' + '/script>'; document.write(fc2footertag); //--></script> <!-- FC2, inc.--> <img src="http://media.fc2.com/counter_img.php?id=50" style="visibility:hidden" alt="inserted by FC2 system" width="0" height="0"> <!-- FC2, inc.--> </body></html>
何卒ご教授の程、よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー