「Linux ブラウザ式クローラー 備忘録 (2025/10/30)」
さて、以前にも書きましたが。
わたくし今はLinuxを使っています。
(移行した理由:
・OSの強制アップデートがない。
・変なアプリの強制インストールがない。
・無料なので、試すだけ試してみればいい。)
その時。
普段使ってるWindows系アプリは
全てLinux系アプリに乗り換える必要があるのですが。
その中で、最も苦労したのは
ブラウザのデータを取得して、ファイルにセーブする
いわゆる「クローラー」ソフトの製作です。
例えば、こういうチャート的なデータ。
「ブラウザの、今見ているページの.htmlデータを、一定間隔でローカルファイルに保存する」
たったそれだけの話なのですが
実際にやろうとすると、めっちゃ難しいのです。-_-;
なんでそんなに大変かと言うと。
ブラウザと言うのは(驚くべき事かも知れませんが)
「ローカルファイルの読み書き」
が禁止されています。
ブラウザがローカルファイルに書き込みたければ、
かならず「ダウンロード」と言う形を取る必要がある。
これはセキュリティ上の要請であり。
このルールを破るのはほぼ不可能。
いずれにせよ。ブラウザのデータを
「任意のローカルファイル.html」に保存するのは
不可能なのです。
唯一の例外が。
ページの保存時でしょうか。
だがこれも、「明示的に、ユーザーが許可した時」
のみ可能であり。
絶対に「ユーザーのクリック動作」が必要。
「n分間隔で、自動で保存してくれ」 そういう動作は出来ないようになっています。
・ちなみに プログラム的に
new System.Net.Http.HttpClient().GetStringAsync("url");
と書いて、こういう画面のデータを取得するのは不可能です。
と言うのも。
new System.Net.Http.HttpClient().GetStringAsync("url");
が取得するのはstaticなhtmlデータ。
だが、↑のチャートなどは。
JavaScriptを使って動的にデータを取得・更新しているので。
static / html 的な視点からでは
値を取得する事ができません。
やはりブラウザで見ている(Javascriptを実行できる)
環境でないとこのデータは取得できません。
そこで次に私が試したことは:
・自作のブラウザの拡張 "I_Want_To_Save"を作り
・"I_Want_To_Save"が、自作サーバーにデータを送信し
・サーバーで受け取って保存する。
こんな感じで。
データを、外部に送り出して。
そこでキャッチするシステムを作ったのですが。
これも無理でしたね。
これをやると、
「クロスオリジン CORS」に引っかかって、実行できないんですわ。
(簡単に説明すると。Javascriptは、"サーバー側が許可した.js"のみが許可され。
ユーザーの自作.jsは許されない。)
まぁ・・・当然ですかね。(-_-;A
何しろ。私がやろうとしてる事は:
・カスタムスクリプトをページに挿入し、
・ユーザーのアクセスしているデータを、外部サーバーに送信
まさしく「盗聴」行為ですので。(汗)
当然、そのような犯罪的なスクリプトの
対策はしっかりされてて。
実行できないようになっておりました。
と言うわけで。
「ブラウザの見てる画面を保存」すると言うのは。
思っているよりもずっと難しい。
セキュリティ上の懸念で。
そのような盗聴的な行為はガッチガチに規制されている。
どうやって、これ。
ローカルファイルに保存できるの?
もっと"捻った"アイディアを絞り出す必要がある。
(だからこれは「難しい問題」なのです。-_-;)
次回。私が見つけた「保存」の手法を紹介します。