KOSEN{BLOG}について

自動購入の際の問題

要素が見つからない問題

seleniumとPythonを使いheddless chromeを操作していた時におきました。

wait.until(EC.element_to_be_clickable())です。

のようにエラーがでた。タイムアウトとのことなので要素を発見できなかったみたいだ。

例外が発生しました: TimeoutException
Message: 
  File "C:\Users\username\Desktop\program\tiget.py", line 58, in Main
    wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="pg-event"]/div/div[2]/div[1]/div/div[1]/div[1]/div[2]/div/a/div[1]/div[2]/span')))
  File "C:\Users\username\Desktop\program\t.py", line 73, in <module>
    schedule.run_pending()

なので一旦消す。

また、これは要素をクリックするためのコードだが、要素をクリックするのではなくそこに含まれるリンク自体のクリックに試みた。

    url3 = data.find_element_by_xpath('//*[@id="pg-event"]/div/div[2]/div[1]/div/div[1]/div[1]/div[2]/div/a').get_attribute('href')
    driver.get(url3)

とすることにした。一旦は解決できたが、やはりエラーは出る。

実際の原因は不明です。

根本的に解決できた訳じゃないのでご了承ください。

以下の時間の問題で解決出来たのかもしれないので読み進めて欲しい。

時間の問題

次はヘッドレスをオフにしてみてみた。

更新した時間が20:00:00.060085秒でアクセスしてるのはprint()により明らかである。
時間通りに動いている。

この時のWEBページを見てみると(スクリーンショット忘れました。ごめんなさい。)まだ受付前となっており受付が始まっていなかった

このことからurl2(購入のWEBページ)へのアクセスが早すぎると考えた。

対策として

while True:
  schedule.run_pending()
  time.sleep(0.5)

このsleepの中身を0.1から0.5にしてみた。

(結局これの問題じゃないとわかったので0.1に戻しました。)

またまた時間の問題

解決すると思いきや、またまた速すぎる。今回はインターネット時報とならべてみてみました。

すると、少しずれて速い気がしたのだ。

そこで、datetime.datetime.now()とインターネット時報のスクリーンショットを使って誤差をある程度で求めてみた。

以下がそのコードだ。(import文などは省く)

url1 = "http://domisan.sakura.ne.jp/timesignal/timesignal.html"

driver.get(url1)
driver.save_screenshot('jihou.png')
print(datetime.datetime.now())

出力は

2020-03-10 21:14:59.257356

このようになり1.43秒ほどのズレがあることがわかった。

これを調整する。

start4 = datetime.datetime.combine(datetime.date.today(), start) + datetime.timedelta(seconds=1.43)

わかってたが少数の計算はできない。

schedule()にミリ秒なんて入れられない。。。

と試行錯誤してたんですが

すごいいいことに気が付きました!!!!

ただ単にURLに飛ぶ前にsleep(1.43)をいれるだけでいいじゃないか!

いやーすっきり。アハハ

っていうか上の問題全部この時計のズレが原因なんじゃ……

とりあえずsleepいれてやってみる。

ちゃんとボタンが押せるようになっており完璧でした!!

とりあえず本日行った改善をまとめてみました。

初号機より変わったことは多いので後日自動購入でいいものができれば少し公開しようと思ってます。

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

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

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

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

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

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

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

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

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

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

ライブポケットでのBotの作成方法

Noteにて有料公開しました。

ライポケのBot作成解説

普段自分が使っているコードも最後に載せています。

お知らせ:時間指定でタップ、クリックしてくれるアプリ

Androidアプリは以下です。

Android限定:時間指定してタップしてくれるアプリ

windowsアプリは以下です。

Windows限定:時間指定してクリックしてくれるアプリ

2 COMMENTS

匿名

時間のズレは厄介ですよね
私の場合はwinのタスクスケジューラでログイン直前に時間修正しています

返信する
こうせ

時間のズレをどうしているのか気になりますね。
今はこのブログに書いてある方法ではできませんし、本当に厄介です。
そのやり方も良さそうですね!

返信する

コメントを残す

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