あるウェブサイトのjsファイル内で、以下のコードが実行されます。
JavaScript
1 var param = new Array(); 2 param[param.length] = new param("key", 'abc'); 3 $.ajax({ 4 url: 'getKeyword', 5 type: "POST", 6 data: param, 7 success: function (response) { 8 if (!response.startsWith("null") && response.length > 0) { 9 // responseをオブジェクトに変換 10 var data = $.parseJSON(response); 11 //dataが目的のデータ。この時点でobject(array)となり、data[0~n]でキーワードを参照できます。 12 } 13 }, 14 error: function (e) { 15 //例外処理 16 } 17 });
このurl:getKeywordをVBA上から実行し、var data をVBA上コレクションなどに格納し、使用ことは可能でしょうか?
ご教授の程お願いいたしますm(_ _)m
<追記①>
http://piyopiyocs.blog115.fc2.com/blog-entry-433.html
で紹介されている方法を試しましたが、405エラーが出てしまいます。
vba
1 Private Sub CommandButton1_Click() 2 '----------------- 3 'リクエスト生成 4 '----------------- 5 'URL(必要に応じて変更) 6 Dim url As String 7 url = "https://example.com/getKeyword" 8 9 'パラメータ(必要に応じて動的に生成) 10 Dim paramStr As String 11 paramStr = "key=abc" 12 13 '-------------- 14 'POST実行 15 '-------------- 16 Dim xmlhttp As Object 17 Set xmlhttp = CreateObject("msxml2.xmlhttp") 18 xmlhttp.Open "POST", url, True 19 xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 20 xmlhttp.send (paramStr) 'パラメータをぽいっちょと 21 22 '-------------- 23 '応答取得 24 '-------------- 25 Dim retCd As String 26 retCd = xmlhttp.Status 'ここでretCdに405が代入されます。 27 28 If retCd <> 200 Then 29 Debug.Print "error:" & retCd ' error:405 が出力されます 30 Else 31 Dim retHtml As String 32 retHtml = StrConv(xmlhttp.responseBody, vbUnicode, 1041) '結果HTML取得 33 Debug.Print retHtml 34 End If 35 End Sub
コメントにもある通り、error:405が出力されます。
この方法では取得不可能なのでしょうか・・?
<さらに追記②>
VBAから、実際に上記のajaxが呼び出されているページにnavigateで遷移してから、以下のコードを実行しました。
vba
1 Dim sb As New StringBuilder '自作のクラスです。他の言語のStringBuilderと同一の機能を持っています 2 3 sb.Add ("javascript:") 4 5 sb.Add (" function KeywordAlert(key) { ") 6 sb.Add (" var param= new Array(); ") 7 sb.Add (" param[param.length] = new param(""key"", key); ") 8 sb.Add (" $.ajax({ ") 9 sb.Add (" url: 'getKeyword', ") 10 sb.Add (" type: ""POST"", ") 11 sb.Add (" data: param, ") 12 sb.Add (" success: function (response) { ") 13 sb.Add (" if (!response.startsWith(""null"") && response.length > 0) { ") 14 ' responseが存在した場合、表示 15 sb.Add (" alert($.parseJSON(response)); ") 16 sb.Add (" } ") 17 sb.Add (" }, ") 18 sb.Add (" error: function (e) { ") 19 sb.Add (" //例外処理 ") 20 sb.Add (" } ") 21 sb.Add (" }); ") 22 sb.Add (" }; ") 23 ' キーワードをアラート 24 sb.Add (" KeywordAlert('abc'); ") 25 26 ' 実行 27 objIE.navigate sb.Text 28
このコードで、目的の文字列がアラートできました!
問題は、このアラートした文字列を、VBAの変数かなにかに突っ込むなどして、VBAで使用したいのですが、方法はありますでしょうか?
そもそも、navigateからjavascriptを実行する方法では連携不可能でしょうか?
ご教授のほど、宜しくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。