KOSEN{BLOG}について

自動購入Bot完成まで

ここは自動購入Bot完成までやってきたことをまとめたページです。

基本的にリンク先を見ればわかるようにしています。

質問などあればコメントなどでしてください。

流れ

手順2
Seleniumでスクレイピング
手順3
パパっとネット見ながら簡単に作成
手順4
問題点の改善
下記に示す

問題点

問題1
時間演算(n分前にログイン処理を行うため)
問題2
要素が見つからない(結果として時間に関する問題だった)
問題3
PC内時間のズレ(インターネット時報とのズレを検出)
問題4
if文でズレを判断し修正

簡単な動作説明

  1. 取りたいチケットのURLを入力
  2. 開始時間を入力
  3. PCとインターネット時報のズレを検出し修正
  4. 2分前にサイトにログイン
  5. 開始時間に購入

とまーざっくりですがこんな感じですね

コード

とりあえず完成したコードの一部を公開します。

作れたことを載せたいのであってこのコードを使えば誰でもできるって訳では無いです。

勿論自動購入するサイトによってもコードは変わります。

ボタンをクリックや文字を入力などのサイトによって変わるようなものは1部端折ってます。

作りたいなと思った人は頑張ってください。

未経験独学でもちゃんと作れましたので

import requests
from bs4 import BeautifulSoup
import math
import time
from time import sleep
import datetime
import schedule
from datetime import timedelta
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
options = webdriver.ChromeOptions()
# 必須
options.add_argument('--headless')
options.add_argument('--disable-gpu')
# headlessでは不要そうな機能
options.add_argument('--disable-desktop-notifications')
options.add_argument("--disable-extensions")
# UA
#options.add_argument('--user-agent=puepue')
# 言語
options.add_argument('--lang=ja')
# 画像を読み込まないで軽くする
options.add_argument('--blink-settings=imagesEnabled=false')

options.add_argument("--proxy-server='direct://'")
options.add_argument("--proxy-bypass-list=*")
driver = webdriver.Chrome(chrome_options=options)

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 10) #指定したdriverに対して最大で10秒間待つように設定する

driver.set_window_size(1045,722) # window size change

url1 = "https://t"
url2 = input("取りたいチケットのURL>")
login = "gmail.com"
password = "k"

start = input("開始時間>")
start1 = datetime.datetime.strptime(start, '%H:%M:%S').time()
start2 = datetime.datetime.combine(datetime.date.today(), start1) - datetime.timedelta(minutes=2)
start3 = start2.strftime("%H:%M:%S")


r = requests.get('https://ntp-a1.nict.go.jp/cgi-bin/jst')
soup = BeautifulSoup(r.text,'lxml')

t1 = soup.find("body").string
t2 = t1.rstrip('\n')
t3 = time.time()
t4 = float(t2)-t3

if t4 >= 0:
    t5 = 0
    t6 = math.ceil(t4)
    t7 = t4 - t6

else:
    t5 = -t4
    t6 = 0
    t7 = 0

start5 = datetime.datetime.combine(datetime.date.today(), start1) + datetime.timedelta(seconds = t6)
start6 = start5.strftime("%H:%M:%S")

def Login():
    driver.get(url1)
    print(datetime.datetime.now())
    print("ログイン出来ました。")

def Main():
    sleep(t5)
    sleep(t7)
    driver.get(url2)

    driver.find_element_by_name('c').submit()
    print(datetime.datetime.now())
    print("get")
    sleep(5)
    driver.quit()
schedule.every().day.at(start3).do(Login)  
schedule.every().day.at(start6).do(Main)  
while True:
  schedule.run_pending()
  time.sleep(0.1)

さいごに

色々調べながら作成しました。

プログラミング初心者でも作れました。努力次第ですね。

これによりPythonの知識もつき良かったです。

これにて自動購入Botの作成は終わりにします。

まだ関係のある記事は書くかもしれませんが笑

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

コメントを残す

メールアドレスが公開されることはありません。