Powershellでウェブブラウザを作る

コンピュータ
PowerShellのあれこれ

APIを眺めていたら、WebBrowserコントロールに目を惹かれるました。
ウェブブラウザを作ろうと思ったら、HTTP(HTTPS)通信でページを取得するリクエスト送って、結果のコンテンツを受け取り、HTMLをパースし、CSSや画像ファイルなどと一緒に画面にレンダリングして、さらにJavaScriptを実行します。それを基本非同期で処理しながら、不測の事態に対応するためしっかりしたエラー処理が必要となります。
と、ちょっと考えただけでも目眩するほどボリュームがあります。

そんな大変な処理をコントロール化したのがWebBrowerコントロールになります。理屈上WindowsFormに貼り付けるとブラウザのようなものが出来上がるはずです。

using namespace System.Windows.Forms

param (
    [string]$Url = "https://maywork.net/"
)


function Main
{
    param (
        $url
    )

    $form = [Form]::new()


    $ab = [Textbox]::new() | % {
        $_.Dock = [DockStyle]::Fill
        $_.Text = $url
        $_
    }

    $wb = [WebBrowser]::new() | % {
        $_.Dock = [DockStyle]::Fill
        $_
    }

    $form.Controls.AddRange(($ab, $wb))

    $form.Add_Load({
        $wb.Navigate([Uri]::new($ab.Text))
    })


    [Application]::run($form)
}

Main $Url

とりあえず試作というかWebBrowerコントロールを試しただけのスクリプトになります。
実行すると警告が出ますが当サイトが表示されました。URLが表示されたテキストボックスはダミーで機能しませんが、ページ内のリンクをクリックすると別なページに遷移することが確認できました。

気になったのはWebBrowerコントロールはWebサーバーに対しどのようなクライアント名を名乗っているのでしょうか?

確認するサイトは沢山ありますが、当サイトもphpが動くので確認用のページを作ってみます。

<?php
echo $_SERVER['HTTP_USER_AGENT'];
?>

結果
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; Win64; x64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)

Mozillaの4.0がどんなものかピンときませんがMSIEの7.0互換だとすると結構古めですので、今日日のウェブサイト特にJavaScriptなどがきちんと実行できない場合もありそうです。

これで汎用的なブラウジングをすることはきつそうですが、HTMLで書かれたヘルプページを表示するぐらいはできそうです。

コメント