KOSEN{BLOG}について

Seleniumを用いた自動購入Bot(試作)

はじめに

まずはじめにこの記事は前回の記事の続きです。

とりあえずばばーっと調べながら書いたコードを下に示します。(要素など適当なものに変えてます。)

CAUTION
これを作るまでPythonを触ったことのないもののコードです。ご理解ください。

これをもとに前回の記事で紹介してないSeleniumのコードを紹介出来たらなと思ってます。

また、Seleniumだけでは無理なこともあるので他のPythonのライブラリも使います。
その都度紹介します。

import schedule
import requests
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
options = webdriver.ChromeOptions()
options.add_argument('--headless')
driver = webdriver.Chrome(options=options)
if __name__ == '__main__':

  url1="login画面のURL"
  url2="購入するもののURL"
  login="mailadless"
  password="password"

def job():
 driver.get(url1)
 driver.find_element_by_id("email").send_keys(login)
 driver.find_element_by_id("password").send_keys(password)
 driver.find_element_by_class_name('btn').send_keys(Keys.ENTER)
 schedule.every().day.at("21:59:30").do(job)
while True:
    schedule.run_pending()
    time.sleep(0.1)
    if schedule.every().day.at("21:59:45"):
        break
        
def job():    
 driver.get(url2)
 driver.find_element_by_id("t").send_keys("2")
 driver.find_element_by_xpath('//*').click()

 driver.find_element_by_id("img").click()
 con_element= driver.find_element_by_id("cvs_select")
 con_select_element = Select(con_element)
 con_select_element.select_by_value("002")
 driver.find_element_by_class_name('agreement').click()
 
 driver.save_screenshot('1.png')
schedule.every().day.at("22:00:00").do(job)
while True:
    schedule.run_pending()
    time.sleep(0.1)

コードの分解

Pythonはimport文を使いライブラリやpipでインストールしたパッケージ、自作のパッケージなどを
インポートし使うことができる。

試行錯誤の末に書けたコードなのでよく見ると結局使わなかったものまで残ってました。
以下はImport文を削ったコードです。(わかりやすいように順番入れ替えてます。)

これから、以下のImport文になぞり上記の全体のコードと合わせて紹介します。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = webdriver.ChromeOptions()
options.add_argument('--headless')
driver = webdriver.Chrome(options=options)

import schedule

from selenium.webdriver.common.keys import Keys

from selenium.webdriver.support.ui import Select

Chromeをheadlessに

最初のImport文ですが、簡単にいうとchromeをheadlessモードで動くようにするもの

headlessモードというのはGUIでは無くCUIで動作させること。
from selenium.webdriver.chrome.options import Options
options = webdriver.ChromeOptions()
options.add_argument('--headless')
#ヘッドレスモードを有効にする(次の行をコメントアウトすると画面が表示される)。
driver = webdriver.Chrome(options=options)
#ChromeのWebDriverのオブジェクトを作成する。

schedule

import schedule

def job():
    #ここにメインの処理
schedule.every().day.at("21:59:30").do(job)
while True:
    schedule.run_pending()
    if schedule.every().day.at("21:59:45"):
        break

コマンドプロンプトでpipをつかいscheduleをインストールできます。
pip install schedule

ここでは21:59:30になるとメインの処理が行われるように書いてます。
他にも何分毎や曜日指定で実行できるようになります。

keys

from selenium.webdriver.common.keys import Keys

driver.find_element_by_class_name('btn').send_keys(Keys.ENTER)

こちらはキーを入力することができるようになります。
このコードではエンターを入力しています。

以下が主なキーとそのコードです。

コード キー
Keys.DOWN 矢印下
Keys.UP 矢印上
Keys.LEFT 矢印左
Keys.RIGHT 矢印右
Keys.ENTER エンターキー
Keys.RETURN リターンキー
Keys.ESCAPE Escキー
Keys.TAB タブキー

select

from selenium.webdriver.support.ui import Select

 con_element= driver.find_element_by_id("cvs_select")
 # 要素を取得
 con_select_element = Select(con_element)
 # 取得した要素をSelectタグに対応した要素に変化させる
 con_select_element.select_by_value("002")
 # 選択したいvalueを指定

selectはドロップダウンメニューなどSelectタグを扱うことができるようになります。

今回はid要素である”cvs_select”というドロップメニューの”002”という要素を選択しました。

おわりに

これを作る際にPythonの基本的な文法など無知だったので至らない部分もあると思いますが、
形として作れたのでとりあえずは満足しました。

あとはうまーく使ってWEBページの自動操作をおこなえば何とかなると思います。
頑張ってください。

ちなみに楽天チケットとかのreCAPTCHAなどの突破は想定してないので無理です。
初心者が相手するものではないですよ(挑戦はした)

Botの購入の速さはインターネット回線によりますので
チケットなどでいい番号取りたいならより速い回線にしましょう。

今回試作品ですが一応色々調整した完成品を以下の記事で紹介しています。

自動購入Bot完成まで

また、書籍を買って実践していくとよりいいものができるかもですね。

おまけ(プログラムのコード)

要らないImport文省いたコードはこちらです。

import schedule
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
options = webdriver.ChromeOptions()
options.add_argument('--headless')
driver = webdriver.Chrome(options=options)
if __name__ == '__main__':

  url1="login画面のURL"
  url2="購入するもののURL"
  login="mailadless"
  password="password"

def job():
 driver.get(url1)
 driver.find_element_by_id("email").send_keys(login)
 driver.find_element_by_id("password").send_keys(password)
 driver.find_element_by_class_name('btn').send_keys(Keys.ENTER)
 schedule.every().day.at("21:59:30").do(job)
while True:
    schedule.run_pending()
    time.sleep(0.1)
    if schedule.every().day.at("21:59:45"):
        break
        
def job():    
 driver.get(url2)
 driver.find_element_by_id("t").send_keys("2")
 driver.find_element_by_xpath('//*').click()

 driver.find_element_by_id("img").click()
 con_element= driver.find_element_by_id("cvs_select")
 con_select_element = Select(con_element)
 con_select_element.select_by_value("002")
 driver.find_element_by_class_name('agreement').click()
 
 driver.save_screenshot('1.png')
schedule.every().day.at("22:00:00").do(job)
while True:
    schedule.run_pending()
    time.sleep(0.1)

無料でPythonが学ぶオススメ講座

techgym(テックジム)というプログラミングスクールが初心者向けに週4で無料講座を開いてくれています。

プログラミングの勉強法などから教えてくれます。

直接的に自動購入Botのことやスクレイピングについては学べませんが、

Pythonの基礎が学べるので第一歩としておすすめします。

また、参加後には講座についていけなかったり復習したい方向けに解説動画ももらえます

Python勉強してみたいなーと思っている方は一度参加してみてはいかがでしょうか?

テックジムのサイトはこちら

以下の記事で詳しく書いてみたのでよかったら覗いてみてください。

【無料】ゼロからPython学習したいなら「テックジム」がおすすめ!

チケ発サイトでの攻略・Bot作成

この記事を訪れる方でオタクでチケ発関係を知りたい方が多いです。

その方向けに記事を書いてみました。

チケット購入まとめ:Botや攻略など

お知らせ:自動でページを更新してくれるWEBアプリを開発しました。

今回、WEBアプリで時間になったらページを更新してくれるものを開発しました。

ページ更新君

登録などの詳細は以下の記事になります。

【ページ更新君】DjangoでWEBアプリを開発!

ぜひ活用してみてください。

6 COMMENTS

やすひろ

コメント失礼します。このツールはローソンチケットでも可能ですか??

返信する
い。

やすひろさん
コメントありがとうございます。
結論から言いますと、厳しいと思います。
理由としては、ローチケを見てきたところ不正な利用を防ぐためにアイテム認証がありました。
不正な利用はBOTなどによる利用ですね、このアイテム認証を突破するのはかなり難しいと思います。
reCAPTCHAや今回のアイテム認証などBOTの対策をされてると基本的には無理と考えたほうがいいです。
BOT対策されていないサイトだと自分の記事を見ていただけたら比較的簡単に作れるようになると思います。

返信する
睡眠学習

コメント失礼します
プログラミング経験のない高校生がカンフェティやパスマーケットように作るのは無謀ですか?

返信する
こうせ

コメントありがとうございます。
自分も高校生の時に作り始めました。
プログラミング経験ないとのことですが、自分もなかったですよ。
一からやりたいことを細かく調べて、コードの意味も大して分からないままコピペで何とか作ったって感じでした。

無謀ではないですよ。
やる気と根気次第じゃないでしょうか?
自分はとりあえずやりたいことのコードを何時間も調べましたし、調べても調べてもネットに自分のやりたいことをしてるコードがなかったり、エラーが出てももコードが理解できていないのでエラーの原因がわからずなんてこともありました。
なので一度作るの断念してました。
暇だったので再挑戦して形にはなったかなって感じです。

プログラミングの一番の勉強法は作りたいものを実際に作ってみると言われているくらいですし、自分も初心者ながらこのBotを作成したことで知識はかなりつきました。
カンフェティやパスマーケットを使ったことがないので何とも言えませんが、とりあえずやってみるのもいいと思いますよ。

ちなみにプログラミングの基本的な知識は「https://note.nkmk.me/python/」このサイトとか分かりやすくていつもお世話になってます。
独学になると結構根気がいると思いますが、頑張ってください。応援しています。

返信する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です