データの取得・保存 > APIが用意されていないサービスからのデータ取得 > Selenium
Seleniumとは
Selenium を一言で説明すると、「予め決めた動作手順に沿って、ブラウザをコンピュータを自動操作してくれるようなツール」である。
Seleniumの特徴
Selenium 自体にいろいろな言語でのインターフェースが用意されており、 Java, Python, C#, Ruby, JavaScript, Kotlin が存在する。というよりも公式による紹介では「中核は WebDriver1 であ」るとのことなので、多言語で利用できるのも当然と言えば当然なのかもしれない。
また、その特徴により、対応するブラウザも WebDriver に対応していれば何でも良いので、ブラウザも Google Chrome2, Firefox, Safari, Opera, Edge, Internet Explorer 等様々対応している。さらに OS にも縛りがないため、 Windows, mac, Linux (もちろん、 Ubuntu や Raspberry Pi OS3 もOKである)どれでも使用できる。
ここまでの説明を聞くと、良いことづくめのように聞こえる。実際メリットは多い。しかし著者は(別記事に書くが)Selenium より Puppeteer と必要に応じて Playwright を使う方をおすすめする。理由は使えるようになるまでのハードルが大きく異なる点である。
Seleniumを使えるようになるまでのハードル
Selenium は、 WebDriver のバージョンを制御したいブラウザのバージョンと合わせてダウンロードし、パスを通す4 必要がある。ということは、セキュリティアップデート等でブラウザのバージョンが変われば飛ぶドライバーは動かなくなってしまう。これは非常に困る。
一方 Puppeteer は自身がインストールされる時に自動的に Chromium をインストールしてくれる5。 もちろん Puppeteer が制御に使用できるバージョンなので無駄な躓きポイントを避けることができる。
Puppeteer は現在 npmとGitHubで配付されており、 Node.js 以外での実行環境は提供されていない。 JavaScript あるいは Node.js について全く知らないという人にとっては、なかなか初期学習コストが高いと思われる。そのような人たちは無理して使うよりも、慣れ親しんだ言語で Selenium を使って制御したほうが、結果的には早いかもしれない。
なお JavaScript は非同期による並列処理を使いやすい言語なので、例えば「複数のファイルを同時にダウンロードし、全て正常完了するまで失敗したもののみリトライする」といったことがやりやすい(と感じる)。非常に応用の利きやすい言語なので、個人的には JavaScript とその実行環境である Node.js を勉強して是非 Puppeteer を使ってほしいと思う。
サンプル
※TODO
関連書籍
初級者向け
退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング:「対象読者はノンプログラマー」と謳うほど、基礎からじっくり教えてくれる。最終目標は RPAツールのように、「単純な繰り返し作業の自動化」だが、その過程で Selenium を紹介。2021年1月27日発売の第2版では、「GmailやGoolgeスプレッドシートの操作」等を追記。
上級者向け
Pythonクローリング&スクレイピング[増補改訂版] -データ収集・解析のための実践開発ガイド:クローリング・スクレイピングまで1冊で学べるお得な本。個人的におすすめ。
Selenium実践入門 ―― 自動化による継続的なブラウザテスト:全て読めば、 Selenium を使った自動制御は一通りできるであろう。その代わり、416ページとかなり分量が多い。
Seleniumデザインパターン & ベストプラクティス:現在となっては、やや内容が古いか。 Selenium を使用した、UIの自動テストの目的で使用する方法を紹介。
-
オープンソース版の Chromium に対応している↩
-
Raspberry Piとは、シングルボードコンピュータの一種で、パソコンが手のひらサイズの1枚の板に敷き詰められているような形をしている。一般的なノートパソコンやデスクトップパソコンと比べ、消費電力が小さいため、付けっぱなしにしてサーバのように使ったり、今回のように自動操作をコンピュータにやらせる目的で運用している人もいる。専用のOSがあり、今までは “Raspbian” という名前だったが、「2020年5月に正式名称がRaspbianからRaspberry Pi OSへ変更」された。
鉤括弧内はCC BY-SA 3.0:Wikipedia, “Raspberry Pi OS - Wikipedia”, アクセス日: 2020年10月7日https://ja.wikipedia.org/wiki/Raspberry_Pi_OS↩ -
ファイルが置いてある場所にプログラムからアクセスできるように、「プログラムが見るべき場所リスト(=パス、Path)」を更新すること、あるいはそのような場所にファイルを置くことを「パスを通す」という。「パスを通す」で慣用句なので、例えば「パスを更新する」といった語の使い方はしない。慣用句なので、パスを通す方法は「パスを通す」で検索すれば、いくらでもヒットする。↩
-
もし Chromium のインストールが不要なら、puppeteer-coreを使用すると、 Chromium のインストールをスキップできる。↩