🍆

Flutter on the Web はスクレイピング対策になる

2022/12/19に公開

辛いね

  • Shadow DOMになっててだるい。 (Playwrightの場合、Shadow DOMをいい感じに処理してくれるので意識する必要はなさそうです)
  • 描画がCanvasになっている。
  • Firebaseとの通信がgRPC(なのが原因なのか?)シリアライズされてて Charles で通信の内容を確認してもテキストが読めない状態になっている。(他のHTTPSのサイトの中身は見える。)復号化みたいなことはできないっぽいので詰み。
  • ブラウザに解析させて、そのデータを取る必要があり、手動でブラウザを操作して通信をリストアップする必要がありとてもだるい。

無理ゲー

DOMから攻めることもできないしい、通信から攻めようとしても難しそうで無理でした。

https://zenn.dev/masa5714/articles/12c917e065a108

いけます!

意気込み

でもワイは諦めへんで。


2022/12/19 22時22分追記

手動スクレイピングにはなるが、データを一括で取る方法を見つけました。
どうやら application/grpc-web+proto というものが使われているようです。元データを deserialize 的なことはできないような気がするので、Chromeに解析させて、その解析結果だけをもらうという手法で実現します。

ChromeのNetworkタブにて必要な通信だけに絞ります。

欲しい通信にカーソルを当てて「Save all as HAR with content」でHARファイルをダウンロードします。

VSCodeなどでHARファイルを開いてみてください。
ほぼJSONみたいな形式になっているかと思います。これをいい感じに使えばいいと思います。

データは

こんな感じでbase64形式で格納されています。
base64からデコードしていい感じに使えばOKです!

完全自動なスクレイピングじゃないので継続的スクレイピングが不可能ですが、一度きりの簡単なスクレイピングをするには十分ではないでしょうか。

継続的スクレイピングの方法は別途調査します。

Discussion