前回のスクリプト改良で、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の出力が行われて処理が完了してしまう。
期待している動作はこうではない。まず、次のようにnetcat.ps1を実行する。
その結果、次のようにmoreで閲覧できる状態になることを期待している。
netcat.ps1の動きとしては、これができないと使い物にならないのだ。