最近、会社のシステムセキュリティが強化されて、仕込んだ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 件のコメント:
コメントを投稿