コードが書かれてないので、一例の提示になりますが、
21:00になったら任意のURLに飛ぶ。
driver.get(URL)
で、ブラウザのアドレスバーにURLを入力してEnterしたのと同じなので、
その前に指定時刻まで待つ処理を入れれば良いかと思います。
SeleniumやChromeのオーバーヘッドがあるので、get()
実行からブラウザの画面が切り替わり始めるまで、どれくらいか(1秒未満のごくわずかだと思いますが)なんどかやって計測して、仮に0.1秒だとすると、20:59.59.9 とかまで待ってから、driver.get(URL)
を実行ということになるかと思います。
待ち方はいろいろ考えられますが、現在時刻と希望時刻の差を秒単位で求めて、time.sleep(秒)
するのが明快かと思います。引数の単位は秒ですが、小数も指定できるので、0.1秒単位くらいであれば調整も可能です。
秒数の計算にはdatetime
ライブラリーを使うのですかね。
https://docs.python.org/ja/3/library/datetime.html
公式リファレンスだけではプログラムを書くのが難しければ、検索するとサンプルが見つかると思います。
21:00にそのページを更新(F5更新)することは可能でしょうか?
リロードは、driver.refresh()
です。
get(URL)
をする時刻を調整するのと、あらかじめget(URL)
しておいてrefresh()
する時刻を調整するのを比較すると、リロードだと、キャッシュにあるファイルの多くはサーバーまで取りに行かないはずなので、時間のブレが少ないかも知れません。
追記:時刻差を求めてその秒数待つというプログラム例
Python
1import datetime
2import time
3(中略)
4now = datetime.datetime.now() # この瞬間の日時。ミリ秒くらいまで求まる
5target = datetime.datetime(now.year,now.month,now.day, 21,0,0) # 本日の21:00:00
6wait = (target-now).total_seconds()-0.1 # 差を求めて秒単位で取得し、調整する時間分を引く
7# 「秒単位で取得」と言っても、残り2分ならtotal_seconds()は120になるので大丈夫。1秒未満の値も小数で付いている
8# print(now, target, wait) #確認したければprintする。printの分だけ時間がずれるので、本番ではprintしないほうがいいか
9if(wait>0):
10 time.sleep(wait)
11else:
12 # 時刻が過ぎている場合にエラーにするならここにそういうコードを書く
13 # エラーにせずに、直ちにgetするならelse部分は不要
14driver.get(URL)
回答前半で書いた「get()実行からブラウザの画面が切り替わり始めるまで」を仮に0.1秒だとして引いていますが、ここは実測して調整下さい。
遅れを実測してその時間を調整するのは、scheduleなど他の手段を使っても同じく必要ですね。
見たとおり、「23:00から翌日01:00まで待つなど」の日またがりは考慮してません。
厳密にはnowを求めてからsleepするまでのプログラム処理時間分だけずれますが、まあ、誤差未満ですかね。driver.getからブラウザ表示までの時間の方が長いはず。
また、sleepはOSのタイマーを使っているのでOSタイマー精度以上の精度は出ません。1ミリ秒とかは無理のようですが今回の目的だとそこまで要らないでしょうね。0.1秒とかは大丈夫。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/09/06 19:09
2024/09/07 11:59 編集
2024/09/08 13:01
2024/09/11 11:21