2023年8月21日月曜日

企業システムのセキュリティですから、個人利用のコードが使えなくなるのは致し方ないところ ー Selenium Basic(VBAマクロ)

          
最近、会社のシステムセキュリティが強化されて、仕込んだVBAが使えません。
それは、ネットのページをHTMLファイルにしてダウンロードする仕組みです。

このファイルは、エクセルに読み込まれて、必要なデータを検索していました。
ところが、突然ダウンロードできなくなって落としたファイルが全くの白紙だ。

これでは使い物にならないのですが、元凶は”URLDownloadToFile”なる関数ね。
VBAに実装されていますが、もはや使われないIE11でURLの展開をする仕組み。

ウインドウズでも、標準ブラウザーが”Edge”に置き換えたのに生き残っていた。
理由は互換性のためと思いますが、会社のシステムでは見限って禁止の断行だ。

こうなると、ダウンロード関数が使えなくなって、VBAで代わりの対策が必要。
VBA以外のプログラム言語を知らないし、プログラム言語を覚える気力もない。

なので、以前、遊びがてら試した”Selenium Basic”でできないかと考え始める。
言語自体も開発がすでに終わっていますが、代替策としては重宝されています。

なので、セキュリティの抜け穴として使えないものか、改めてコード作成なの。
ブラウザーからダウンロードしてインストールしますが、心配な点もあります。

それは、URLの読み込みにウエッブドライバー(webdriver.exe)を使います。
”Selenium Basic”のフォルダー配下にありますが、ブラウザーとリンクします。

なので、ブラウザーの頻繁なバージョンアップで、ドライバーも追従が面倒ね。
もし、バージョンの違いでダウンロードできなければ、エラーも表示されます。

一方、ドライバーを自動的に更新するコードもネットで見受けられてはいます。
これは後で参考することにして、先ずは、基本的なコードを理解するのが先決。

そう思ってコードを書きましたが、ダウンロードする箇所の指定がややこしい。
先ず、”Selenium”で動かすブラウザのドライバーを、変数定義するのが第一歩。

このオブジェクトから、色々な操作を行うメソッドを付加しながら実施します。
ただ、ページ上でどの部分をダウンロードするのか、指定が必要になりました。

IE11では一括ダウンロードできたのですが、こちらはHTML言語の知識が必要。
例えば、本文が必要なら"main"とか"main_text"ですが、探さないといけない。

このために、ターゲットになるURLを開いて、F12キーを押すと構文が現れる。
ブラウザーのデベロッパー機能なのですが、それなりに修練が必要と思います。

というわけで、サンプル構文を挙げておくので、参考にでもしてみてください。
この”Selenium Basic”は、使用する時に”Selenium Type Library”の参照設定も必要だし、当然、インストールしなければ使えませんので、少しハードルの高い機能だなと思ったのでした。

※サンプルコード
Sub UrlDwnLd()
Dim Driver As New Selenium.WebDriver 'ウエッブドライバーのオブジェクト
Dim elmsHtml As WebElements, elmHtml As WebElement
Dim FileNumber As Integer, Str As String
  Driver.Start "Chrome" 'クロームドライバーの起動
    Driver.Get "https://alpine-ski-slope.blogspot.com/2023/07/blog-post_20.html"  'クロームドライバーで読み込むURLの指定
      Set elmsHtml = Driver.FindElementsByClass("main")  '本文は"main"
FileNumber = FreeFile  '使えるファイル番号取得
    Str = ""
      Str = Str & Environ("homedrive")
        Str = Str & Environ("homepath")
          Str = Str & "\Downloads\test.txt"
             Str = Str & "" '保存先:ダウンロードフォルダに”test.txt”
  Open Str For Output As #FileNumber
    For Each elmHtml In elmsHtml
      Print #FileNumber, elmHtml.Text
    Next  '”test.txt”ファイルに一行ずつ書き込んでいく
Driver.Close
  Set Driver = Nothing
    Close #FileNumber
    MsgBox "ファイルの作成が完了しました", vbInformation
End Sub



いいねと思ったら、三つポチっとね!
にほんブログ村 スキースノボーブログへにほんブログ村 スキースノボーブログ スキーへにほんブログ村 旅行ブログ 旅日記・旅の思い出へ
にほんブログ村    にほんブログ村      にほんブログ村 



0 件のコメント:

コメントを投稿