前回のスクリプト改良で、Microsoft Edgeのヘッドレスモードを使って取得できるWebページの種類が増えた。しかし、このままだと実はページャと共に使えない。今回は、この問題を解決する方法を実装する。

Microsoft Edgeのヘッドレスモードで取得できるWebページが増加

前回作成したPowerShellスクリプト「netcat.ps1」は次の通りだ。Microsoft Edgeのヘッドレスモードの動作に「User-Agent」の指定を行うことで、取得できるWebページの種類を増やした。curl.exeのときと同じ方法だ。

#!/usr/bin/env pwsh

#========================================================================
# URLで指定されたリソースを取得
#========================================================================

#========================================================================
# 引数を処理
#   -URL url        WebリソースのURL
#   -Agent agent    リクエストで使うエージェントを指定
#========================================================================
Param(
    [Parameter(Mandatory=$true)][String]$URL = "",
    [String]$Agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
)

#========================================================================
# Webリソース取得に利用するアプリケーション
#========================================================================
$msedge='C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe'
$curl='C:\Windows\System32\curl.exe'

#========================================================================
# どの方法でWebリソースを取得するかを判断
#========================================================================
if (Test-Path $msedge) {

    #================================================================
    # Microsoft Edgeを使って取得
    #================================================================
    $method='msedge'
}
elseif (Test-Path $curl) {

    #================================================================
    # curl を使って取得
    #================================================================
    $method='curl'
}
else {
    $method='none'
}

#========================================================================
# Webリソースを取得
#========================================================================
switch ($method)
{
    #================================================================
    # Microsoft Edgeを使って取得
    #================================================================
    'msedge'
    {
        $o1='--headless'
        $o2='--dump-dom'
        $o3='--enable-logging'
        $o4='--user-agent="$agent"'

        Start-Process   -FilePath $msedge           `
                -ArgumentList $o1,$o2,$o3,$o4,$URL  `
                -Wait
    }

    #================================================================
    # curl を使って取得
    #================================================================
    'curl'
    {
        & $curl     --location              `
                -A $Agent               `
                -get $URL
    }
}

これでかなり多くのWebページを自動取得できるようになったのだが、実はページャと一緒には使えない。今回はその原因を調べるとともに、解決方法を実装する。

ページャで補足できない

netcat.ps1でWebページの内容を取得して閲覧できるのだから、これをパイプラインでページャにつなげて、インタラクティブに中身を確認したいというのは当然出てくる要望だ。例えば、次のようにnetcat.ps1の出力を「more」に接続して使うといった使い方だ。

  • netcat.ps1の出力をmoreにつなげる

    netcat.ps1の出力をmoreにつなげる

しかし、このコマンドを実行すると、次のようにページャは機能せず、netcat.ps1の出力が行われて処理が完了してしまう。

  • 実行してみるとmoreが機能していないことがわかる

    実行してみるとmoreが機能していないことがわかる

期待している動作はこうではない。まず、次のようにnetcat.ps1を実行する。

  • netcat.ps1をこのように実行して

    netcat.ps1を実行する

その結果、次のようにmoreで閲覧できる状態になることを期待している。

  • netcat.ps1の出力をmoreで補足して閲覧している

    netcat.ps1の出力をmoreで補足して閲覧している

netcat.ps1の動きとしては、これができないと使い物にならないのだ。

なぜページャで補足できないのか

この記事は
Members+会員限定記事です。

ログイン/会員登録する