LoginSignup
10
8

More than 1 year has passed since last update.

Excel VBA+seleniumでjqueryを利用する方法

Posted at

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
10
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
8