Playwright for .NETを Linuxで使うときのメモ

長年動かしていたスクレイピングのコードがあったのが、この度対象のウェブサイトが Next.JSに移行して JavaScriptランタイムがないと全くサイトの情報が取れなくなってしまったので Playwrightを使うように書き換えた。TypeScriptを使うのが主流なんだろうけど馴染みがないので Python .NETのどちらを選ぶかとなったのがちゃんとした型あり言語の方がいいかということで .NET版, C#を選んだ。F#でもいいんだけど、手続型ぽくしか書けないだろうし、C#にした。いくつかすんなりといかないことがあったのでそのメモ

プロジェクトへパッケージの追加

dotnet add package Microsoft.Playwright

まあこれは普通にいける

各種ブラウザのインストール

パッケージをインストールするとブラウザインストールスクリプトもインストールされるのだが、これが PowerShellスクリプトWindows以外の環境だと初めに PowerShellをインストールする必要があった. Githubかバイナリを取得するのでもいいが、面倒なので dotnetコマンドで入れた

dotnet tool update --global PowerShell  

これは $DOTNET_ROOT/tools にインストールされるので、そこに PATHを設定し、設定ファイルを再読み込みする。インストール出来たらブラウザをインストールする

pwsh bin/Debug/net9.0/playwright.ps1 install

これで ~/.cache/ms-playwright の下に各種ブラウザがインストールされる。デフォルトだと Chromium, WebKit, Firefoxがインストールされる。Chromiumのみ必要などの場合は PowerShellスクリプトコマンドライン引数で調整することができる

シングルバイナリ化した場合の対応

Playwrightを動かすには, node.jsや JavaScriptファイルが必要になる。これらのファイルはパッケージインストール時に併せてインストールされるが、シングルバイナリ化した場合これらのファイルは同梱されない。(dotnet run で動かす場合は特に気にする必要はない)。これらのファイルが入ったディレクトリをバイナリと同じディレクトリか、環境変数 PLAYWRIGHT_DRIVER_SEARCH_PATH に置く必要がある。(開発時のためか 2つ上のディレクトリでも可ではある)

# シングルバイナリ化
dotnet publish -c Release -r linux-x64 --self-contained true -p:PublishSingleFile=true

# PATHが設定されている場所へインストール
cp bin/Release/DOT_NET_VERSION/linux-x64/publish/MyProgram your_install_path

# node.jsと JSファイルのインストール
cp -r bin/Release/$(DOTNET_VERSION)/linux-x64/.playwright your_install_path

これでシングルバイナリ化したプログラムを動かすことができた.