Excel VBAでseleniumを利用してスクレイピングツールを作っているときに、javascriptのコードを実行しているのですが、jqueryでコードが書きたくなりました。
しかし、調べたけれど見当たらなかったので残します。
実行するjavascriptのコードは下記の通りです。
var script = document.createElement('script');
script.setAttribute("src", "https://code.jquery.com/jquery-3.6.0.min.js");
script.setAttribute("integrity", "sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=");
cript.setAttribute("crossorigin", "anonymous");
document.body.appendChild(script);
scriptタグを挿入して実行するコードです。
Excel VBAで実行するコードは下記の通りです。
'javascriptのコードを指定
strJS = "var script=document.createElement('script');return script.setAttribute('src','https://code.jquery.com/jquery-3.6.0.min.js'),script.setAttribute('integrity','sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4='),script.setAttribute('crossorigin','anonymous'),document.body.appendChild(script)"
'javascriptのコードを実行
Driver.ExecuteScript (strJS)
これでjqueryが読み込まれます。
そうしたら後はjqueryが使えます。例えばjqueryでGoogleのトップページのタイトル画像のURLを取得する場合は下記のように書けます。
'jqueryの実行 googleのタイトル画像のurlを取得
strJS = "return $('.lnXdpd').attr('src')"
'javascriptのコードを実行して結果をメッセージボックスに表示する
MsgBox Driver.ExecuteScript(strJS)
上記のようにjqueryの構文が使えるようになります。
ポイントとしてscriptタグを埋め込んでライブラリを読み込むのに少し時間がかかるため、scriptタグを埋め込むコードと読み込んだライブラリを利用するコードの間にwaitを入れて時間に余裕を持たせた方がいいです。
今回はjqueryを利用しましたが、html2canvasなど他のライブラリも同様の方法で利用することができます。
作成できるプログラムの幅が広がるので楽しいですね。
最後に今回作成したプログラムの全文を載せて置きます。
何か参考になれば嬉しいです。
Sub test()
Dim strJS As String
Dim result As String
Dim Driver As New Selenium.ChromeDriver
Call Driver.Start("chrome")
'Googleのページを開く
Driver.Get ("https://www.google.com/?hl=ja")
'表示が終わるまで待機する(ミリ秒指定で2秒)
Driver.Wait 2000
'jqueryの読み込み
strJS = "var script=document.createElement('script');return script.setAttribute('src','https://code.jquery.com/jquery-3.6.0.min.js'),script.setAttribute('integrity','sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4='),script.setAttribute('crossorigin','anonymous'),document.body.appendChild(script)"
'javascriptのコードを実行
Driver.ExecuteScript (strJS)
'ライブラリの読み込み時間確保
Driver.Wait 3000
'jqueryの実行 googleのタイトル画像のurlを取得
strJS = "return $('.lnXdpd').attr('src')"
'javascriptのコードを実行して結果をメッセージボックスに表示する
MsgBox Driver.ExecuteScript(strJS)
'ウィンドウを閉じる
Driver.Close
End Sub