株のシステムトレードをしよう - 1から始める株自動取引システムの作り方

株式をコンピュータに売買させる仕組みを少しずつ作っていきます。できあがってから公開ではなく、書いたら途中でも記事として即掲載して、後から固定ページにして体裁を整える方式で進めていきます。

Selenium

データの取得・保存 > APIが用意されていないサービスからのデータ取得 > Selenium

www.selenium.dev Selenium_Logo

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 は現在 npmGitHubで配付されており、 Node.js 以外での実行環境は提供されていない。 JavaScript あるいは Node.js について全く知らないという人にとっては、なかなか初期学習コストが高いと思われる。そのような人たちは無理して使うよりも、慣れ親しんだ言語で Selenium を使って制御したほうが、結果的には早いかもしれない。

なお JavaScript は非同期による並列処理を使いやすい言語なので、例えば「複数のファイルを同時にダウンロードし、全て正常完了するまで失敗したもののみリトライする」といったことがやりやすい(と感じる)。非常に応用の利きやすい言語なので、個人的には JavaScript とその実行環境である Node.js を勉強して是非 Puppeteer を使ってほしいと思う。

サンプル

※TODO

関連書籍

初級者向け

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング:「対象読者はノンプログラマー」と謳うほど、基礎からじっくり教えてくれる。最終目標は RPAツールのように、「単純な繰り返し作業の自動化」だが、その過程で Selenium を紹介。2021年1月27日発売の第2版では、「GmailやGoolgeスプレッドシートの操作」等を追記。

https://www.amazon.co.jp/gp/product/487311778X/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=487311778X&linkCode=as2&tag=systemtrade21-22&linkId=877b9ddd4c44f0489540bced729902e9https://ir-jp.amazon-adsystem.com/e/ir?t=systemtrade21-22&l=am2&o=9&a=487311778X https://ir-jp.amazon-adsystem.com/e/ir?t=systemtrade21-22&language=ja_JP&l=li2&o=9&a=487311778X https://www.amazon.co.jp/dp/4873119278/ref=as_li_ss_il?&linkCode=li2&tag=systemtrade21-22&linkId=58f5fd7fccd4e019a7196a53713c3364&language=ja_JP https://ir-jp.amazon-adsystem.com/e/ir?t=systemtrade21-22&language=ja_JP&l=li2&o=9&a=4873119278

上級者向け

Pythonクローリング&スクレイピング[増補改訂版] -データ収集・解析のための実践開発ガイド:クローリング・スクレイピングまで1冊で学べるお得な本。個人的におすすめ。

https://www.amazon.co.jp/dp/4297107384/ref=as_li_ss_il?&linkCode=li2&tag=systemtrade21-22&linkId=e03b82fc88e194e1b5674f15a97a07a8&language=ja_JP https://ir-jp.amazon-adsystem.com/e/ir?t=systemtrade21-22&language=ja_JP&l=li2&o=9&a=4297107384

Selenium実践入門 ―― 自動化による継続的なブラウザテスト:全て読めば、 Selenium を使った自動制御は一通りできるであろう。その代わり、416ページとかなり分量が多い。

https://www.amazon.co.jp/dp/4774178942/ref=as_li_ss_il?&linkCode=li2&tag=systemtrade21-22&linkId=d96235f76c32b451eb3924cfd7d48031&language=ja_JP https://ir-jp.amazon-adsystem.com/e/ir?t=systemtrade21-22&language=ja_JP&l=li2&o=9&a=4774178942

Seleniumデザインパターン & ベストプラクティス:現在となっては、やや内容が古いか。 Selenium を使用した、UIの自動テストの目的で使用する方法を紹介。

https://www.amazon.co.jp/dp/4873117429/ref=as_li_ss_il?&linkCode=li2&tag=systemtrade21-22&linkId=7fbc1551dd9c6c83417216de57e87d22&language=ja_JP https://ir-jp.amazon-adsystem.com/e/ir?t=systemtrade21-22&language=ja_JP&l=li2&o=9&a=4873117429


  1. https://www.selenium.dev/documentation/ja/webdriver/

  2. オープンソース版の Chromium に対応している

  3. 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

  4. ファイルが置いてある場所にプログラムからアクセスできるように、「プログラムが見るべき場所リスト(=パス、Path)」を更新すること、あるいはそのような場所にファイルを置くことを「パスを通す」という。「パスを通す」で慣用句なので、例えば「パスを更新する」といった語の使い方はしない。慣用句なので、パスを通す方法は「パスを通す」で検索すれば、いくらでもヒットする。

  5. もし Chromium のインストールが不要なら、puppeteer-coreを使用すると、 Chromium のインストールをスキップできる。

(C) 2020 dogwood008 禁無断転載 不許複製 Reprinting, reproducing are prohibited.