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いれてやってみる。

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

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

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

コメントを残す

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