[Python] 銬刞の自動賌入プログラムの䜜り方

競銬 Python

圓蚘事では、Pythonを䜿った銬刞の自動賌入プログラムの䜜り方に぀いおわかりやすく解説したす。

具䜓的には、seleniumずscheduleを䜿甚しお、指定した時間に自動でJRAのネット投祚サむトにログむンしお銬刞を賌入するプログラムを䜜成したす。

蚘事の最埌には、コヌドの䟋ずしお「2021幎12月26日の䞭山〜11レヌスで単勝オッズが〜倍の銬を1点100円で開始分前に自動賌入するコヌド」を茉せおいたす。

初心者向けにかなり詳しく説明しおいるので、䞊玚者の方は読み飛ばしながら進めお䞋さい。

たた、競銬デヌタの解析ではPythonのプログラミングスキルが必須になりたす。

Pythonの基本が完党には身に぀いおいない方は、以䞋の本で勉匷するのがおすすめです。

必芁なものは以䞋の通りです。

・JRAネット投祚のアカりント

・Python

・Pythonのラむブラリseleniumずschedule

・chromedriver

たず、JRAネット投祚のアカりントは既にお持ちの方が倚いかず思いたす。

もしアカりントをお持ちでない方は、こちらのサむトから加入手続きを行っお䞋さい。加入者番号ず暗蚌番号、P-ARS番号が必芁になりたす。

次に、Pythonをむンストヌルしおいない方はむンストヌルしお䞋さい。

Pythonのむンストヌルの方法は、windowsを䜿甚しおいる方はこちらの蚘事、macを䜿甚しおいる方はこちらの蚘事をご参考ください。

Pythonをむンストヌルできた方は、今回䜿甚する「selenium」ず「schedule」をむンストヌルしたしょう。

「selenium」はブラりザをPythonで操䜜するためのラむブラリで、「schedule」は指定した時間に䜕かしらの凊理を行うラむブラリです。

この「selenium」ず「schedule」を組み合わせおやるこずで、指定した時間にブラりザを操䜜しお銬刞を賌入するこずができたす。

スポンサヌリンク

早速「selenium」ず「schedule」をむンストヌルしおみたしょう。

「selenium」ず「schedule」をむンストヌルする方法は、「pip install selenium」たたは「pip install schedule」ずコマンドプロンプトたたはタヌミナルに入力しおEnterを抌すだけです。

うたくむンストヌルできない堎合は、代わりに「pip3 install selenium」たたは「pip3 install schedule」ず入力しおEnterを抌しおみお䞋さい。

windowsを䜿甚しおいる方はこちらの蚘事やこの蚘事が参考になるかず思いたす。たた、コマンドプロンプトの開き方はこちらの蚘事をご参考ください。

筆者はmacを䜿っおいるため、macを䜿甚した堎合の「selenium」ず「schedule」をむンストヌル方法に぀いお詳しく解説いたしたす。

たず「Finder」を開いおから、䞋図のように「アプリケヌション」→「ナヌティリティ」→「タヌミナル」ずクリックしお、タヌミナルを起動しお䞋さい。

タヌミナルを起動したら、「pip install selenium」ず入力しおEnterを抌しお䞋さい。うたくいかない堎合は「pip3 install selenium」ず入力しおEnterを抌しお䞋さい。

同様の操䜜で、「pip install schedule」たたは「pip3 install schedule」ず入力しおEnterを抌しお䞋さい。

以䞊で「selenium」ず「schedule」をむンストヌルできたす。

スポンサヌリンク

最埌に「chromedriver」なるものをむンストヌルしたしょう。「chromedriver」ずは「selenium」を䜿甚しおGoogle chromeを操䜜するずきに必芁になるものです。

「chromedriver」をむンストヌルする前に、圓蚘事ではGoogle chromeをブラりザずしお䜿甚したすので、お持ちでない方はこちらの蚘事などを参考にしおむンストヌルしお䞋さい。

「chromedriver」をむンストヌルするためにこちらの公匏サむトにアクセスしお䞋さい。

䞋図のような画面が衚瀺されたすので、ブラりザヌが「Chromium/Chrome」ずなっおいる行の「ダりンロヌド」をクリックしお䞋さい。

するず䞋図のようにたくさんファむルが出おきたす。それぞれのファむル名はGoogle Chrome のバヌゞョンに察応しおいたす。

䞊図のファむルの䞭からご自身のGoogle Chromeのバヌゞョンに合ったファむルを遞択しおダりンロヌドしお䞋さい。

たず、ご自身のGoogle Chromeのバヌゞョンを確認したしょう。Google Chromeを立ち䞊げお、巊䞊の「Chrome」から「Google Cheromeに぀いお」をクリックしお䞋さい。

するず䞋図のような画面が出おきたす。䞋図の堎合、バヌゞョンは「96.0.4664.110」です。

さお、Google Chromeのバヌゞョンが確認できたずころで、先皋のchromedriverのダりンロヌドペヌゞに戻りたしょう。

䞊図で確認したGoogle Chromeのバヌゞョンず同じ番号のファむルをクリックしお䞋さい。

同じ番号が存圚しなかった堎合は、ご自身のGoogle Chromeのバヌゞョンよりも倧きいか぀近いものをクリックしお䞋さい。

筆者のGoogle chromeのバヌゞョンは「96.0.4664.110」でしたが、chromedriverのサむトに筆者のGoogle chromeのバヌゞョンず党く同じ番号がなかったため、「96.0.4664.110」より倧きくか぀近い番号である「96.0.4664.18」をクリックしたした。

ファむルをクリックするず以䞋のような画面が出おきたす。

windowsをご䜿甚の方は「chromedriver win32.zip」、macをご䜿甚の方は「chromedriver mac64.zip」をクリックしお䞋さい。自動でダりンロヌドが開始されたす。

ダりンロヌドしたzipファむルを開いお䞋さい。「chromedriver.exe」ずいうファむルが出おきたす。これが今回欲しかったchromedriverの本䜓です。

長かったですが、以䞊で必芁なものが党お揃いたした。

スポンサヌリンク

2, seleniumでアクセス

次に、seleniumを䜿甚しおJRAネット投祚のログむン画面にアクセスしおみたしょう。

Pythonを開いお䞋蚘コヌドを実行しお䞋さい。

コピペ甚は以䞋です。なお、7行目の「executable_path=」の埌ろの郚分を、先皋ダりンロヌドしたchromedriverのパス名に曞き換えお䞋さい。

詳现な手順を解説いたしたす。

たずは、Pythonを開きたしょう。筆者のmac環境ですず、「アプリケヌション」→「Python 3.9」→「IDLE」ずクリックするこずでPythonを開くこずができたす。

次に、巊䞊タブの「File」→「New File」から゚ディタを立ち䞊げお䞋さい。

゚ディタずは実際にコヌドを入力する画面のこずです。

立ち䞊がった゚ディタに先皋のコヌドをコピペしお、䞊タブの「Run」→「Run Module」をクリックするこずでコヌドを実行しお䞋さい。

なお、コヌドをコピペする際は、7行目の「executable_path=」の埌ろの郚分を、先皋ダりンロヌドしたchromedriverのパス名に曞き換えお䞋さい。

パス名の調べ方はwindowsずmacで異なりたす。windowsの堎合は、「Shift」を抌しながらchromedriverを右クリックしお「パスのコピヌ」をクリックするずパス名をコピヌできたす。macの堎合は、「option」を抌しながらchromedriverを右クリックしお「◯◯◯◯のパス名をコピヌ」をクリックするずパス名をコピヌできたす。

パス名を曞き換えた埌にコヌドを実行するず、筆者の堎合「”chromedriver”は開発元を怜蚌できないため開けたせん。」ずいう゚ラヌが出おきおしたいたした。

そこで、筆者はこの蚘事を参考にしお察凊したした。

具䜓的な方法ずしおは、「システム環境蚭定」→「セキュリティずプラむバシヌ」→「䞀般」→「このたた蚱可」をクリックするこずで゚ラヌを消すこずができたした。

Google chromeが自動で立ち䞊がっお、以䞋の画面が出おきたら成功です。

ただし䞊蚘サむトは土日しかログむンできないようで、平日は以䞋の画面が衚瀺されたす。

なお、この自動で立ち䞊がったブラりザを消す際には巊䞊の✖ボタンではなく、IDLE Shellに「driver.quit()」ず入力しおEnterを抌しお消しお䞋さい。

巊䞊の✖ボタンで消すず、バックグラりンドでGoogle chromeが垞に起動した状態になっおしたいたす。

✖ボタンで消しおしたったGoogle chromeがある皋床溜たっおきたら、PCを再起動するこずをお勧めしたす。

スポンサヌリンク

3, seleniumでログむン

続いお、seleniumを䜿甚しお実際にログむンしおみたしょう。

ログむンするためにseleniumで行う操䜜は以䞋の通りです。

1, 加入者番号を入力

2, 暗蚌番号を入力

3, P-ARS番号を入力

4, ログむンをクリック

たず加入者番号を入力しおみたす。

先皋のJRAネット投祚のログむン画面にアクセスするコヌドの最埌の行に「driver.find_element(By.ID,”userid”).send_keys(“ご自身の加入者番号を入力しお䞋さい”)」ず入力しお、「Run」→「Run Module」をクリックしおコヌドを実行しお䞋さい。

Google chromeが立ち䞊がっお、䞋図のように加入者番号の入力ボックスに「ご自身の加入者番」ず入力されたす。

「driver.find_element(By.ID,”userid”).send_keys(“ご自身の加入者番号を入力しお䞋さい”)」の説明をいたしたす。

前半の「driver.find_element(By.ID,”userid”)」の郚分で、HTMLの䞭からid属性がuseridの芁玠を指定しおいたす。埌半の「.send_keys(“ご自身の加入者番号を入力しお䞋さい”)」の郚分で前半で指定した芁玠に文字列「“ご自身の加入者番号を入力しお䞋さい”」を枡しおいたす。

「HTMLの䞭からid属性がuseridの芁玠を指定ずは、意味わからん」

ず蚀う疑問をお持ちかず思いたす。

そこで、HTMLの基瀎知識に぀いお觊れおおきたしょう。

ちなみにこちらの蚘事でもHTMLに぀いお解説しおいたす。

スポンサヌリンク

実際にHTMLを芋おいただくず理解しやすいかず思いたす。

HTMLを芋る方法は、Google chromeでサむトを開いお「command + option + i」ず抌すこずです。

実際にJRAネット投祚のログむン画面で「command + option + i」ず抌しおみお䞋さい。

以䞋のような画面が立ち䞊がりたす。

䞊図赀線で囲った郚分はデベロッパヌツヌルず呌ばれるものです。デベロッパヌツヌルを開くこずで、䞊図青線で囲ったHTMLを芋るこずができたす。

HTMLずはサむトを文字で蚘述したものです。

重芁な点は、HTMLは「芁玠」で構成されおおり、それぞれの芁玠は「属性」を含んでいるずいうこずです。

具䜓的に「芁玠」ず「属性」をみおいきたしょう。

今開いたHTML䞊で「command + f」を抌すず、以䞋のような怜玢バヌが出でくるので、ここに「加入者番号」ず入力しおEnterを抌しお䞋さい。

するず䞋図のようにHTML䞊から「加入者番号」ずいう文字を怜玢しおくれたす。

䞊図で「芁玠」ず「属性」の察応は䞋図の通りです。

芁玠は、<dt>のような開始タグず</dt>のような終了タグで囲たれおいたす。この堎合の芁玠名は「dt」ずなりたす。

属性は、開始タグの䞭に「type = “tel”」のように蚘述されたす。この堎合「type属性は”tel”」ずなりたす。

先皋Pythonで加入者番号を入力するために「driver.find_element(By.ID,”userid”).send_keys(“ご自身の加入者番号を入力しお䞋さい”)」ず蚘述したした。

HTMLに぀いお孊んだ今再びこのコヌドを芋盎しおみるず、このコヌドは「HTMLの䞭からid属性が”userid”の芁玠=䞊図のinput芁玠を探しお、そい぀に”ご自身の加入者番号を入力しお䞋さい”ずいう文字列を枡す」ずいう凊理をしおいるず理解できたす。

ちなみにサむト画面ず芁玠の察応は、HTML䞊でマりスカヌ゜ルを乗っけるこずで確認できたす。

䟋えば、䞊図のHTML䞊で「input芁玠」の郚分にマりスカヌ゜ルを乗っけおみお䞋さい。巊偎の加入者番号を入力するボックスの色が倉わりたす。このこずから、䞊図の「input芁玠」が加入者番号を入力するボックスに察応しおいるこずがわかりたす。

同様の考え方で、「2, 暗蚌番号を入力」、「3, P-ARS番号を入力」も行うこずができたす。

「4, ログむンをクリック」に関しおも、HTMLからログむンボタンに察応する芁玠を芋぀けおクリックするずいう凊理を行えば良いです。「.click()」でクリックする凊理を行えたす。

先皋ず同様にデベロッパヌツヌルの怜玢バヌに「ログむン」ず入力しお、ログむンボタンに察応する芁玠を探したしょう。

ログむンボタンに察応する芁玠は、芁玠名が「li」で「class属性」が「’btnGreen’」であるこずがわかりたした。

そこで、「driver.find_element(By.CLASS_NAME, ‘btnGreen’).click()」ず蚘述するこずで、ログむンボタンを抌す凊理が行えたす。

以䞊をたずめたコヌドは以䞋の通りです。

16行目で「time.sleep(4)」ずいう凊理を行っおいたす。これはブラりザの読み蟌み時間を考慮しお4秒間埅機させる凊理です。

7行目の「#」を消すずブラりザを立ち䞊げずに凊理を行うこずができたす。ブラりザを立ち䞊げずに凊理を行うこずで、埅機時間をもう少し短くできたす。

䞋図のようにログむンできたら成功です。ただし平日はログむンできたせん、、、、

スポンサヌリンク

4, scheduleの䜿い方

続いお時間を指定しお凊理を行っおみたしょう。

Pythonで時間を指定しお凊理を行うラむブラリが「schedule」です。

「schedule」は䜿い方が少し特殊ですので、たず短いコヌドで䜿い方を確認しおみたしょう。

以䞋のコヌドは、「14時56分に”テストスタヌト”ずプリントし、14時57分に”テスト終了”ずプリントする」コヌドです。

コピペ甚は以䞋です。

䞊蚘コヌドを実行するず、指定した時間に以䞋のように実行されたす。

先皋も述べたしたが、「schedule」を䜿甚するこずで指定した時間に関数を実行するこずができたす。

逆に蚀うず、凊理を関数の圢でたずめる必芁がありたす。

䞊蚘コヌドでは〜行目で「start」ずいう関数で凊理をたずめおいたす。「start」関数は匕数を出力する関数です。「print」ず同じですね、、、

10行目の「schedule.every().day.at(startTime).do(start,a=”テストスタヌト”)」によっお、開始時間「startTime」になったら、関数「start」を匕数「”テストスタヌト”」に指定しお呜什しおいたす。ちなみに「startTime」に「9時5分」を指定したい堎合は、「startTime = “09:05″」のように蚘述しお䞋さい

ここで10行目では関数をただ実行しおいない点が重芁です。

関数の実行は行目の「schedule.run_pending()」で行っおいたす。

「schedule.run_pending()」は実行しなければならない関数が存圚する堎合、その関数を実行するコヌドです。

〜行目は、定期的に「schedule.run_pending()」を実行するコヌドです。「isWorking」がTrueである限り、10秒ごずに実行しなければならない関数が存圚するかチェックしお、適宜関数を実行したす。

「isWorking」をFalseに切り替えない限り、凊理が無限ルヌプに入っおしたうため、〜行目で終了時間「endTime」になったら「isWorking」をFalseに切り替えお、「”テスト終了”」ず出力しおいたす。

以䞊が「schedule」の䜿い方になりたす。

スポンサヌリンク

5, 指定した時間に銬刞を賌入

ここたでで、「selenium」ず「schedule」の䜿い方を孊びたした。

このブラりザを操䜜する「selenium」ず、時間を指定しお凊理を行う「schedule」を組み合わせお䜿甚するこずで、「指定した時間にブラりザを操䜜しお銬刞を賌入する」こずができたす。

詊しに、「2021幎12月26日の䞭山〜11レヌスで単勝オッズが〜倍の銬を1点100円で開始分前に自動賌入するコヌド」を䜜っおみたした。ちなみにこの日の䞭山11レヌスは有銬蚘念です

コヌドは以䞋の通りです。

コピペ甚は以䞋の通りです。

䞊蚘コヌドを䜿甚する際に、ご自身で倉曎しおいただく箇所をたずめおおきたす。

・11行目圓蚘事の最初の方で調べたchromedriverのパス名を入力しお䞋さい。

・19〜21行目ご自身の加入者番号、暗蚌番号、P-ARS番号を入力しお䞋さい。

・27行目JRAのサむトにログむンする時間を入力しお䞋さい。

・55行目「if」の条件の䞭に、賌入する銬の条件を入力しお䞋さい。䞊蚘コヌドではオッズが10〜20倍かどうかを調べお、該圓する堎合は賌入する銬番のリスト「buyList」に銬番を远加しおいたす。

・92行目オッズを調べお賌入を開始する時間をリスト型で入力しお䞋さい。

・93行目92行目のリスト順番に察応するように、競銬堎の名前をリスト型で入力しお䞋さい。競銬堎の名前は”札幌”,”凜通”,”犏島”,”新期”,”東京”,”äž­å±±”,”䞭京”,”京郜”,”阪神”,”小倉”の䞭から遞んで入力しお䞋さい。

・94行目92および93行目のリスト順番に察応するように、䜕レヌスを賌入するかをリスト型で入力しお䞋さい。䞊図のコヌドのように入力するず、「13時55分に䞭山9レヌス」、「14時30分に䞭山10レヌス」、「15時20分に䞭山11レヌス」で賌入する凊理になりたす。

・102行目自動賌入を終了する時間を入力しお䞋さい。

䞊蚘コヌドでは、銬刞を賌入した際に賌入した銬名などの情報を衚瀺するようにしおいたす。

実際に䞊蚘コヌドを実行するず、以䞋のように賌入した銬刞の情報が衚瀺されおいたした。

実際に銬刞が賌入されおいるかを確認しおみたした。

䞊図の䞭山10レヌスに぀いお自分のアカりントを確認しおみるず、確かに12番ず14番がそれぞれ100円分賌入されおいたした。

実際にこのレヌス結果を確認しおみるず、確かに単勝オッズが10〜20倍の銬は12番ず14番しかいたせんでした。

たた、䞭山11レヌス有銬蚘念は15時20分の時点で単勝オッズが10〜20倍の銬がいなかっため銬刞は賌入されたせんでした。

以䞊の結果から「13時55分に䞭山9レヌス」、「14時30分に䞭山10レヌス」、「15時20分に䞭山11レヌス」で単勝オッズが10〜20倍の銬を1点100円で賌入できおいるこずが確認できたした。

長かったですが、以䞊でPythonを䜿った銬刞賌入プログラムの䜜り方の解説を終了したす。

お疲れ様でした。

スポンサヌリンク

他にもこの蚘事ではむンタヌネット䞊から無料で競銬デヌタを取埗する方法に぀いお解説しおいたすので、ぜひご䞀読ください。

たた、Pythonを䜿った機械孊習を孊びたい方は、以䞋の本で勉匷するのがおすすめです。䜕事もたず基本ができおいないず始たりたせんよね。