PowerShellでInternet Explorerを操作する

コンピュータ
PowerShellからIntenet Explorerを操作できると、理論上表示できるページの情報はなんでも取得することができます。

以前にSystem.Net.WebClientとComObjectでHTMLFILEを使って似たような処理をしています。
違いとしてはWebClientでダウンロードしHTMLFILEとして読み込みますのでローカルデータ(ファイル)扱いになります。
HTMLに含まれるリンクアドレスが相対アドレスの場合、絶対アドレスに変換するルーチンを自前で処理する必要があります。

今回のサンプルはインターネットのサイトを表示している状態でデータを取得しますのでHTMLに含まれるリンクアドレスはInternet Explorerが絶対アドレスにしてくれます。
また、JavaScriptなど動的にHTMLを変更するページにも対応可能です。

PowerShellスクリプトを初めて実行する場合

PowerShellスクリプトの実行を許可してください。
Powershellのps1ファイルを実行する方法
はじめに WindowsのコマンドラインインターフェースであるPowershellはコマンド操作をテキストファイルに記述したスクリプトファイルを実行することが出来ます。 Microsoft Excelで言うところのマクロのような物で...

ソース

<#
.Synopsis
   IEを操作するサンプル
.DESCRIPTION
   Internet Explorerで指定のページのh2タグで囲まれた文字列を取得します。
.EXAMPLE
   .\sample_ie.ps1 取得するURL
#>
param(
    [string]
    $TargetUrl='https://maywork.net/'
)

function sample_ie($url)
{
    # IEを初期化
    $ie = New-Object -ComObject InternetExplorer.Application
    # IEを可視化
    $ie.Visible = $true
    # URLにページを移動
    $ie.Navigate($url)
    # ページの読み込み待ち
    while ($ie.busy -or $ie.readystate -ne 4) {
        Start-Sleep -Seconds 1
    }
    
    # ドキュメントオブジェクト
    $doc = $ie.Document
    $reslut = $doc.body.all | ? {
        # すべてのタグからH2のみ選択
        $_.tagName -eq 'H2'
    } | % {
        # $ieを参照をそのまま返すと$ie.Quit()で$ieオブジェクトが閉じられてエラーになります。
        # H2に囲まれた文字列を返す
        $_.innerText
    }

    # IEを閉じる
    $ie.Quit()

    $reslut
}

$r = sample_ie $TargetUrl
$r

結果

何かと便利そうですがInternet Explorerは人間が見て操作するアプリケーションであるため例外処理などを考えるとバッチ処理(スクリプト)で扱うには骨が折れます。IEにこだわる必要が無いのであればInvoke-WebRequestを使って同様な結果が得られます。
PowerShellでWebページの情報を抽出する。
以前にInternet Explorerを使ってWebページから情報を抽出する記事を投稿しましたが、PowerShellのコマンドレットInvoke-WebRequestを使ってもっとシンプルなスクリプトにしてみました。 スク...

スクリプトの実行環境

プロダクト名
Windows 10 Home
ビルド番号
17763.379
Powershellバージョン
5.1.17763.316
.NET Framework
.NET Framework 4.7.2

コメント