2020年10月17日

ブラウザ自動化を取り巻く技術

言語によってライブラリ/プロジェクト名が違うのでややこしい。レイヤーごとにまとめなおしたが分類あやふやだし随時書き直してく予定。

テストフレームワーク

自動テストをするためのフレームワーク。通常は用途や求める速度に応じてブラウザを選んで使う。

  • capybara ruby
  • watir ruby

ブラウザに操作を送信するやつ

Capybaraだとdriverっていうんだけど次の層もwebdriverなのでややこしい。テストフレームワーク使わないならここから。

  • selenium 言語いろいろ 各種webdriver対応
  • pupetter nodejs chromedriver
  • poltergeist capybara(ruby) phantomJS
  • appartion ruby chromedriver

chromedriver系は自前でヘッドレス起動するものもあるし、リモートで起動済みのやつに接続することもできることが多い。

特定のブラウザに起因しないものもある。

  • PhantomJS Webkit実装。nodejs。テストフレームワークでもある (開発停止中)
  • mechanize 正確にはHTTP通信とHTMLのパースを行うラッパー。js非対応だがその分軽い。

ブラウザAPI

driver, headless browser あたりで呼ばれる。標準化→W3C wbdriver

通常のブラウザを外部(別プロセスとかリモート)から操作できるようにAPIを公開するイメージ。自分のコードではこのレイヤーと直接通信することはまず無い。

関連技術。「デスクトップ」の概念を新人に説明すんのがしんどい。

  • Xvfb - 仮想デスクトップつくる。ディスプレイがないリモートサーバーやCLI環境などで使うが、通常のラップトップでもメインのログインセッションの裏で動かしたいときに便利。
  • VNC - 仮想デスクトップに接続するために使える

結局どれがいいのよ

相手によって得物を変えるのが楽。ここまで書いといて何だが普通のHTMLパースで済ませることのが多い。宗教上の理由で標準ライブラリしか使えないときもあるし。

  1. 静的サイトから数行抜き出し: HTTP通信(標準ライブラリか、サードパーティか) + 正規表現。curl + grepもあり。
  2. HTMLのパースがありページはvalid (not malformed): 〃 + 標準ライブラリ rexml(ruby)・html.parser (python)
  3. すこしやっかいなHTMLパース: 〃 + サードパーティライブラリ nokogiri(ruby)・beautifulsoup(python)
  4. Cookie処理が入ってくる: mechanize このレベルだとrubyで書くのが好き
  5. jsバリバリのやつ: selenium、pupetterあたり
posted by かぷらす at 23:15| Comment(0) | 調査 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
コチラをクリックしてください