長年動かしていたスクレイピングのコードがあったのが、この度対象のウェブサイトが 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
これでシングルバイナリ化したプログラムを動かすことができた.