ujimushi(@旧sradjp(15364))の日記

旧スラドの日記の引越先です

Julia言語でplaywright-cliを使ってブラウザを自動操作する

はじめに

Julia言語でブラウザを自動操作するとなると,勢い WebDriver.jlを使うことになるのですが, 割と手間がかかります。

最近はPlaywrightが使われることが多いような気がしますが, 対応している言語はJavaScript,Python,Java, .NETで,残念ながらJulia言語は 対応していません。

ただ,最近ローカルLLMを利用して,opencodeを使おうとか思って調べているうちに, Playwright-mcp以外に,Plyawright-cliがあることを知りました。

本来の目的としては,LLMによるオーサリングでブラウザを自動操作する感じなのでしょうが, bash上からコマンドラインで操作できるということは,Julia言語からrunコマンド等でも 十分操作可能ということです。

なので,今回は邪道とは思うのですが,Julia言語上からplaywright-cliを使ってブラウザを 自動で操作するのを試してみました。

playwright-cliのインストール

何はともあれPlyawright-cliをインストールします。

基本的にはリンク先の通りにインストールすればいいのですが,

  1. node.jsのインストール
  2. playwright-cliのインストール
  3. playwright-cli用のchromeのインストール

の順にインストールしていきます。

1.は基本的にnode.jsのインストール方法でインストールするだけです。 ubuntuに関しては,snapのNode.js Runtimeを利用してインストールしました。

バージョンは24.4.1です。

2.

npm install -g @playwright/cli@latest

でOKのはずですが,snapパッケージだからなのかインストール先が/usr/local/...なのでsudoを頭につける必要があります。

playwright-cli --help

等で何か表示されればOKです。

その後,

playwright-cli install-browser

でブラウザをインストールできると思います。(忘れました…。ただ,npx playwright install chrome等とかと共通かと思います。)

Windowsの場合は普通にchromeをインストーラでインストールすれば利用できます。

playwright-cliをjulia言語から使う

基本的にはplaywright-cliはシェルから実行する仕組みなので,Julia言語から利用するのは基本的に,

  1. mylog = read(`playwright-cli ...`, String)
  2. run(`palywright-cli ...`)

のような形で利用することになるかと思います。

なお,Windowsの場合は,playwright-cli.cmdでないとうまくいかないので, 何かの変数に定義しておいて,それを利用する感じにするといいでしょう。

chromeでないとダメと書いていたりするのですが,--browser=msedgeとオプションをつけると ちゃんと動いている(ms-edgeはchromeのフォーク)ようなので,業務用とかにも応用できそうな気がします。

次がwindowsのJulia言語のREPLから少し実行させてみた例になります。

julia> playwright_cli = "playwright-cli.cmd"
"playwright-cli.cmd"

julia> run(`$playwright_cli open https://www.yahoo.co.jp/ --headed --browser=msedge`)
### Browser `default` opened with pid 9180.
- default:
  - browser-type: msedge
  - user-data-dir: <in-memory>
  - headed: true
---
### Ran Playwright code
```js
await page.goto('https://www.yahoo.co.jp/');
```
### Page
- Page URL: https://www.yahoo.co.jp/
- Page Title: Yahoo! JAPAN
- Console: 3 errors, 1 warnings
### Snapshot
- [Snapshot](.playwright-cli\page-2026-03-25T12-21-44-713Z.yml)
### Events
- New console entries: .playwright-cli\console-2026-03-25T12-21-42-633Z.log#L1-L4
Process(`playwright-cli.cmd open https://www.yahoo.co.jp/ --headed --browser=msedge`, ProcessExited(0))

ここで,標準出力に出力されている文字列の中に,[Snapshot](.playwright-cli/page....yml) という箇所があります。このファイルの中身はHTMLの構成要素をYAMLにしたものが保存されているので, この中身を解析して処理することになります。

次のようにyahooの検索サイトで検索してブラウザを開くような処理を実行してみます。

playwright-cli fill eXX ...eXXのラベルがついているsearchboxに文字列を記入し, playwright-cli click eYYeYYのラベルがついているボタンをクリックします。

function open_and_search_yahoo(search_string, session="yahoo")
    first_log = read(`playwright-cli -s=$session open  https://www.yahoo.co.jp/ --headed`, String)
    m = match(r"\[Snapshot\]\((.*)\)", first_log)
    yml_1st = read(m.captures[1], String)
    m_search = match(r"searchbox .*\[ref=([0-9e]+)\]", yml_1st)
    m_button = match(r"button.*\"検索\".*\[ref=([0-9e]+)\]", yml_1st)
    run(`playwright-cli -s=$session fill $(m_search.captures[1]) "$(search_string)"`)
    run(`playwright-cli -s=$session click $(m_button.captures[1])`)
    nothing
end

自動テストの場合は,画面表示しない方が便利なことが多いので,--headedフラグを外す方が多いかと思います。

その他playwright-cli closeでセッションを閉じる等,javascript等の言語を直接知らなくても

  • Julia言語
  • 正規表現の知識
  • playwright-cliのコマンドの知識

だけで,ブラウザの自動操作が可能となります。 まぁTypeScriptJavaScriptを利用する方が手っ取り速いとは思いますが…

さいごに

今回は邪道ながら,Julia言語を利用してplaywright-cliでブラウザを自動操作する方法について紹介してみました。

いわゆる「目的外使用」ということになると思いますが,正規表現の利用がしやすいPerlやRuby等でも 同じような事ができそうです。