2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

自動で購入する君

Last updated at Posted at 2021-03-04

#自動で購入する君を作る
今回は自動で購入するbotを作成したので備忘録として。
コード全体は載せないけど、これを組み合わせれば自動購入botはほぼ作れます。

#使用するパッケージ

パッケージ バージョン
datetime  標準モジュール
requests 2.25.1
selenium 3.141.0
chromedriver_binary ブラウザに合わせる

chromedriver_binaryは下記参照。Chromeのドライバと合わせてインストールします。

ChromeとPythonのchromedriver-binaryのバージョンを合わせたい。

#初期値設定

autobuy.py
url = input("購入したいサイトのトップページURL:")
url2 = input("購入するURL:")

login = "ログインID"
password = "パスワード"

options = webdriver.ChromeOptions()
driver = webdriver.Chrome()

ここで初手詰まりポイント。driverのカッコ内を(Options = Options)としていたが、何故かログインできず。
ログイン時にロボットと勘違いされてしまいます。

#webdriverの設定

def init_condition():
    #If you want to run as headless, remove commentout
    #options.add_argument('--headless')
    options.add_argument('--disable-gpu')
    options.add_argument('--disable-desktop-notifications')
    options.add_argument("--disable-extensions")#
    options.add_argument('--lang=ja')
    return


def photo_leading_off():
    #Ignore photos
    options.add_argument('--blink-settings=imagesEnabled=false')
    options.add_argument("--proxy-server='direct://'")
    options.add_argument("--proxy-bypass-list=*")
    return

webdriverの動作設定。ここは脳死で書けばほぼ問題なし。
--headlessはコメントアウトしてあるが、読み込み時にブラウザを起動せずにバックグラウンド動作的な感じにしたいときはコメントアウトを外す。

photo_leading_offは、起動すると画像をすべてすっ飛ばして起動。読み込みが早くなります。

#ログインをする

def login():
    driver.find_element_by_link_text("ログイン").click()
    driver.execute_script('document.getElementById("login_id").value="%s";' % login)
    #For Amazon
    #driver.find_element_by_id('continue').submit()
    driver.execute_script('document.getElementById("password").value="%s";' % password) 
    #For check box to remember
    #driver.find_element_by_name('rememberMe').click()
    driver.find_element_by_class_name('button').submit()
    print("\n\n Success login \n\n")
    return

ログインは、基本Webサイトを動作するイメージ。
一行目でHTML内から”ログイン”の文字を探しクリック。だいたいログインボタンにはログインと書いてあるので結構汎用性あり。
そこから先はログインページの中身次第で” ”内を変更する必要があるが、だいたい似たような名づけをされているのでわかりやすい。

#時間設定

def time_control():

    i=0

    def job():
        print("Start job")
        nonlocal i
        i=1
        return
    
    start = input("開始時間(00:00:00) ")
    start1 = datetime.datetime.strptime(start, '%H:%M:%S').time()
    start2 = datetime.datetime.combine(datetime.date.today(), start1) + datetime.timedelta(seconds=5)
    start3 = start2.strftime("%H:%M:%S")
    print("Start at ", start1)
    schedule.every().day.at(start3).do(job)

    while i==0:
        schedule.run_pending()
        sleep(1)
    return

PC内の時間とリアルタイムの時差をとってプログラムを起動させる。start2内の数字が現実世界との差。
1秒ごとに更新しながら開始時間になったらjob起動するよ!jobが起動するとiが変わって無限ループキャンセルするよ!の意。

ちなみにPythonだと変数は特に指定がない限りすべてGlobalで認識されるらしい。
ただし、jobで変えた変数は返せないので一応nonlocalで定義している。
do()では関数しか入らず、式は入れられないのでiの返り値ではできなかった。

#購入!!!!

def purchace_ticket():
    driver.get(url2)
    driver.find_element_by_link_text("押したいボタンの名前とか").click()
    return

ログインのところとほぼ同じ。
find_elementは適当に使って問題なし。一番明瞭なのはxpathかも。

以上をmainの中に好きな順番で突っ込めば勝手に好きな時間にログイン、購入できる。
訂正やらなにやらあればコメントください!!!!!!!!

*時間設定は実際成功していないので時間やらなにやらもうちょっと色々調整してみてください

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?