カテゴリー
【Puppeteer実用講座】Wine/Conoha VPS(Linux)にKabuステーションが入らなくなったのでPuppeteerで操作を代替する
※ 当ページには【広告/PR】を含む場合があります。
2025/05/06
2025/07/05

個人的な株式資産の管理で、VPS上の自作CUIアプリケーションによってセミオートマチックな処理を常駐させていましたが、ちょっと前にKabuステーションがWineで動かなくなって割と放置しておりました。
そこからKabuステーションの開発状況の推移をしばらく様子の状態が継続していました。
現状、Wineでの動作に成功されたような報告もなく、この状況がなかなか変わらないので、ともかく別の方法で株式資産管理を行うことを模索する必要がありそうです(泣)。
とはいえ、KabuステーションAPIは個人向けの国内株式取引においては”唯一”の公開APIサービスですので、Linuxユーザーには移行先の候補が無いのが頭の痛い点です。
この手の話で、元はKabuステーションAPIの登場以前、Javascriptからは、Puppeteerに代表されるヘッドレスブラウザ操作のスクリプトで、ウェブサイトをスクレイピングする手法が広くやられてきました。
今更先祖返りと揶揄されそうな今更なテクニックで、ベンダーから提供される本物のAPIとはならないものの、背に腹は変えられないため、
「Puppeteer」
新しいKabuステーションをWineで動かすときの問題点
本題に入る前に、現在のKabuステーションがWine上で動かせない状況を少し整理しておきます。
もしかしたら、そのうち問題が解決する可能性もないとも言えませんので...(もちろんVPSでもWindows OSベースのインスタンスを使えばこんな悩みは一切無用です)
以下の記事でも触れていましたが、
Kabuステーションは長らく、
「ClickOne形式(.appref-ms)」
アプリケーションの仕様が大きく変更になったのは2024年の後半あたりで、
Microsoft Edge WebView2 Runtime
もちろんこれはWindowsユーザーには好ましい変更点となった反面、Wineで無理クソ動かしていたLinuxユーザーには非常に高いハードルのようになってしまいました。
試しに、wine-10のstagingで現行のKabuステーションのインストーラーである
setup.exe
アカウントにログインして、
[kabuステーション起動]

ダウンロードをクリックし、
setup.exe

.ssh/config
$ scp ファイル <SSHの送り先>:~/
例えば
my-conoha
$ cd ダウンロード
$ ls
setup.exe
$ scp setup.exe my-conoha:~/
setup.exe 100% 860KB 1.8MB/s 00:00
ここからはConoha VPS側のGUIでリモートデスクトップから操作します。

おもむろにこのインストーラーをwineで立ち上げてみましょう。
$ wine setup.exe
00c0:fixme:wineusb:query_id Unhandled ID query type 0x5.
00c0:fixme:wineusb:query_id Unhandled ID query type 0x5.
00c0:fixme:wineusb:query_id Unhandled ID query type 0x5.
0024:err:winediag:ntlm_check_version ntlm_auth was not found. Make sure that ntlm_auth >= 3.0.25 is in your path. Usually, you can find it in the winbind package of your distribution.
0024:err:ntlm:ntlm_LsaApInitializePackage no NTLM support, expect problems
0024:fixme:heap:RtlSetHeapInformation HEAP_INFORMATION_CLASS 1 not implemented!
0024:err:richedit:ReadStyleSheet skipping optional destination
いくつか、エラーが出ているようなので、1つ1つ足りない設定を潰していきます。
まず、致命的ではないものの、
winediag:SECUR32_initNTLMSP
これはwinbindをインストールし直せばよいようです。
$ sudo apt remove winbind && sudo apt install winbind -y
もう一つ
richedit:ReadStyleSheet
再度setup.exeをwineしてみますと、
$ wine setup.exe
結果...、画面が真っ黒になってブラックスクリーン状態になってしまい、正常には動作してくれません。
一応、
webview2
ネットで似たような記事を探すと、wine9あたりでwebview2(x86)がどうにか動くけれど、x64ではクラッシュするなどの報告が少々ありましたが、wine10では十分な見地も無いようです。
この辺はもう少し待ったら状況も変わってくるかもしれませんが、これ以上WineでKabuステーションを操作する試みで深入りするはやめておきます。
PuppeteerでSBI証券サイト(バックアップサイト)のオペレーションを自作
kabuステーションAPIがLinuxから使えなくなったような状況ですので、当初はウェブサイトの中でも軽量に操作可能な
ところが、昨今、個人の証券口座への不正侵入や大規模なフィッシング詐欺が大きな社会問題となっていることもあり、なんともタイムリーにSBI証券口座のバックアップサイトが閉鎖されてしまうようです!

2025年5月で、サービス終了してしまうとのことで、スクレイピングのソースコードの準備を進めていただけにとてもショックです...
もはや意味をなさないですが、記念にConoha VPSからSBIバックアップサイトへログイン後のトップページをキャプチャした画像をおいておきます。

さて、大本命であったSBI証券口座のバックアップサイトが候補から消えたので、今後はPupperteerでログインしやすそうなサイトを探さないといけなくなりました。
証券口座の選定はまた後日別の記事でご報告するとして、今回はVPSのNodejs動作環境の準備手順を説明するに話をとどめます。
Debianインスタンスで最新のNodejsを「n」でインストール
VPS上のLinuxOSでPupperteerを使うためには、当然Nodejs環境が必要になります。
Debianのパッケージ安定版のNodejsをインストールするのはとても簡単です。
$ sudo apt install -y nodejs npm
ただしそのままだと、Debianのパッケージ安定版は最新のNodejsとのバージョンの隔たりが結構あります。
$ node --version
v18.19.2
見てのように、v18は現時点から考えると、ESModuleで動かしにくいため、Pupperteerをツール化して動かすにしてはちょっと古くて使いにくいです。
そこで、Nodeのバージョン管理ツールである
「n」
ひとまずnをグローバルインストールします。
$ sudo npm install n -g
次にnからNodejsを最新の安定版にアップグレードします。
$ sudo n stable
あとは、最初にパッケージインストールした削除&クリーンにします。
$ sudo apt purge -y nodejs npm
これで一度Debianインスタンスを再起動し、バージョンを再度確認してみると、
$ node --version
v22.15.0
と、現状でリリース安定版で最新のv22系になっています。
もしもこの時点で、
$ node --version
-bash: /usr/bin/node: No such file or directory
となってしまった場合、何らかの理由で
n
#ターミナルエミュレータがbash/zsh/ash/dash/kshの場合
$ hash -r
#ターミナルエミュレータがcsh/tcshの場合
$ rehash
と手動で実行すると正しくリンクが作成されます。
「n」でインストールバージョンを選択する
場合によっては、インストールするNodeのバージョン指定を要求されるケースがあります。
例えばNodeネイティブでビルドされたバイナリを含んだパッケージなどを利用するとしばしば起こるエラーが挙げられます。
Error: The module '/*********/better_sqlite3.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 137. This version of Node.js requires
NODE_MODULE_VERSION 120. Please try re-compiling or re-installing
the module (for instance, using `npm rebuild` or `npm install`).
#....
Node.js v22.15.0
なので、先程は"とりあえずStableを入れておけば問題なかろう"の発想でインストールしましたが、別の方法を模索する必要があります。
まずはリモートでインストール可能なバージョンをリストアップしてみます。
$ n ls-remote
Listing remote... Displaying 20 matches (use --all to see all).
24.3.0
24.2.0
24.1.0
24.0.2
24.0.1
24.0.0
23.11.1
23.11.0
23.10.0
23.9.0
23.8.0
23.7.0
23.6.1
23.6.0
23.5.0
23.4.0
23.3.0
23.2.0
23.1.0
23.0.0
これで最近の新しいバージョンで、上位20項目がリストアップされました。
これより古いバージョンを取得したい場合には、
--all
例えば、
v23.11.1
$ sudo n 23.11.1
とバージョンを指定したインストールが可能になっています。
単に最新バージョン(
24.3.0
#👇ここでは sudo n 24.3.0 と同じ
$ sudo n latest
とします。
また不要になったバージョンのNodeは、いつまでも残しておく必要もないので、アンインストールしたほうが良いでしょう。
これは「n」のインタラクティブモードで簡単に行えます。
$ sudo n
#👇インタラクティブモード(対話モード)で管理
node/21.6.1
node/22.17.0
ο node/24.3.0
Use up/down arrow keys to select a version, return key to install, d to delete, q to quit
消したいNodeバージョンを選んで、Dキーを押すだけで簡単にアンインストールすることができます。
Chrome for Testをインストール
Puppeteerは、v19以前ではChromium、そしてv20から
サポートされるブラウザに大きく依存していますので、Puppeteer v19以前であれば、対応のChromiumを実行環境へインストールする必要がありました。
$ sudo apt install chromium
$ which chromium
/usr/bin/chromium
インストール先の実行パス(/usr/bin/chromium)はPupperteerの指定パラメータで利用します。
v20以降では、Puppeteerユーザーがブラウザを個別にインストールする必要がなくなり、Node側の操作で完結できるようになっています。
#puppeteerに対応したchromeをキャッシュする
$ sudo npx puppeteer browsers install chrome
キャッシュしたブラウザのバイナリは
/<ユーザー名>/.cache/puppeteer/
ログイン機能とCLI機能の導入
ソースコードの実装も具体的に説明していきたかったのですが、ブログ記事のとっかかりとして当初考えていたSBI証券口座バックアップサイトを使った実装は意味がなくなってしまいました。
ここでは実装方針だけ軽く紹介して、具体的な話は次回以降に回します。
まずはログイン機能がないと話になりません。
以下の記事では、Dockerからの操作にはなりますが、某M証券のページを操作したときのものです。
なお、M証券さんのサイトはGUIの作りに癖が強い印象ですので、今回の話からは候補にしづらくはあります。
また、Pupperteerはnodeコマンドからの起動になるため、リッチなGUI画面を自作できれば別ですが、基本はコンソールからのヘッドレス操作になります。
そこでCLIツール仕立てにするのが一番お手軽な実装になるのですが、ここでは、「Shelljs」と「argparse」を利用します。
これらのライブラリのインストールと簡単な使い方に関しては、以下の記事内で行いましたので、そちらを参考にしてください。
まとめ
タイムリーにSBI証券口座のバックアップサイトのサービス終了がアナウンスされてしまい、割と話の出鼻をくじかれてしましました。
残念ではありますが、近年のサイバー犯罪はかなり巧妙化しているので、各証券会社もセキュリティの強化が急務になっているため致し方ありません。
むしろPupperteerでもログインしにくくなる可能性が多分にあり、そちらのほうも気になる点です。
次回以降、証券サイトの選定も含めて、自動操作を実装していこうかと思います。
記事を書いた人
ナンデモ系エンジニア
主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。
カテゴリー