回答編集履歴

2

補足追記

2024/09/07 12:08

投稿

otn
otn

スコア85647

test CHANGED
@@ -35,3 +35,4 @@
35
35
  遅れを実測してその時間を調整するのは、scheduleなど他の手段を使っても同じく必要ですね。
36
36
  見たとおり、「23:00から翌日01:00まで待つなど」の日またがりは考慮してません。
37
37
  厳密にはnowを求めてからsleepするまでのプログラム処理時間分だけずれますが、まあ、誤差未満ですかね。driver.getからブラウザ表示までの時間の方が長いはず。
38
+ また、sleepはOSのタイマーを使っているのでOSタイマー精度以上の精度は出ません。1ミリ秒とかは無理のようですが今回の目的だとそこまで要らないでしょうね。0.1秒とかは大丈夫。

1

サンプルプログラムの追記

2024/09/07 11:58

投稿

otn
otn

スコア85647

test CHANGED
@@ -13,3 +13,25 @@
13
13
  リロードは、`driver.refresh()`です。
14
14
 
15
15
  `get(URL)`をする時刻を調整するのと、あらかじめ`get(URL)`しておいて`refresh()`する時刻を調整するのを比較すると、リロードだと、キャッシュにあるファイルの多くはサーバーまで取りに行かないはずなので、時間のブレが少ないかも知れません。
16
+
17
+ ## 追記:時刻差を求めてその秒数待つというプログラム例
18
+ ```Python
19
+ import datetime
20
+ import time
21
+ (中略)
22
+ now = datetime.datetime.now() # この瞬間の日時。ミリ秒くらいまで求まる
23
+ target = datetime.datetime(now.year,now.month,now.day, 21,0,0) # 本日の21:00:00
24
+ wait = (target-now).total_seconds()-0.1 # 差を求めて秒単位で取得し、調整する時間分を引く
25
+ # 「秒単位で取得」と言っても、残り2分ならtotal_seconds()は120になるので大丈夫。1秒未満の値も小数で付いている
26
+ # print(now, target, wait) #確認したければprintする。printの分だけ時間がずれるので、本番ではprintしないほうがいいか
27
+ if(wait>0):
28
+ time.sleep(wait)
29
+ else:
30
+ # 時刻が過ぎている場合にエラーにするならここにそういうコードを書く
31
+ # エラーにせずに、直ちにgetするならelse部分は不要
32
+ driver.get(URL)
33
+ ```
34
+ 回答前半で書いた「get()実行からブラウザの画面が切り替わり始めるまで」を仮に0.1秒だとして引いていますが、ここは実測して調整下さい。
35
+ 遅れを実測してその時間を調整するのは、scheduleなど他の手段を使っても同じく必要ですね。
36
+ 見たとおり、「23:00から翌日01:00まで待つなど」の日またがりは考慮してません。
37
+ 厳密にはnowを求めてからsleepするまでのプログラム処理時間分だけずれますが、まあ、誤差未満ですかね。driver.getからブラウザ表示までの時間の方が長いはず。