言語によってライブラリ/プロジェクト名が違うのでややこしい。レイヤーごとにまとめなおしたが分類あやふやだし随時書き直してく予定。
テストフレームワーク
自動テストをするためのフレームワーク。通常は用途や求める速度に応じてブラウザを選んで使う。
- capybara ruby
- watir ruby
ブラウザに操作を送信するやつ
Capybaraだとdriverっていうんだけど次の層もwebdriverなのでややこしい。テストフレームワーク使わないならここから。
- selenium 言語いろいろ 各種webdriver対応
- pupetter nodejs chromedriver
- poltergeist capybara(ruby) phantomJS
- appartion ruby chromedriver
chromedriver系は自前でヘッドレス起動するものもあるし、リモートで起動済みのやつに接続することもできることが多い。
特定のブラウザに起因しないものもある。
ブラウザAPI
driver, headless browser あたりで呼ばれる。標準化→W3C wbdriver。
通常のブラウザを外部(別プロセスとかリモート)から操作できるようにAPIを公開するイメージ。自分のコードではこのレイヤーと直接通信することはまず無い。
関連技術。「デスクトップ」の概念を新人に説明すんのがしんどい。
- Xvfb - 仮想デスクトップつくる。ディスプレイがないリモートサーバーやCLI環境などで使うが、通常のラップトップでもメインのログインセッションの裏で動かしたいときに便利。
- VNC - 仮想デスクトップに接続するために使える
結局どれがいいのよ
相手によって得物を変えるのが楽。ここまで書いといて何だが普通のHTMLパースで済ませることのが多い。宗教上の理由で標準ライブラリしか使えないときもあるし。
- 静的サイトから数行抜き出し: HTTP通信(標準ライブラリか、サードパーティか) + 正規表現。curl + grepもあり。
- HTMLのパースがありページはvalid (not malformed): 〃 + 標準ライブラリ rexml(ruby)・html.parser (python)
- すこしやっかいなHTMLパース: 〃 + サードパーティライブラリ nokogiri(ruby)・beautifulsoup(python)
- Cookie処理が入ってくる: mechanize このレベルだとrubyで書くのが好き
- jsバリバリのやつ: selenium、pupetterあたり