gpt4 book ai didi

java - 等待/ sleep 直到特定时间(例如星期四 10 :59) in java

转载 作者:行者123 更新时间:2023-12-02 01:16:19 25 4
gpt4 key购买 nike

我目前正在网络机器人中使用 selenium 在网站上购买商品。当我搜索我想购买的商品但找不到时,我使用 driver.navigate().refresh() 刷新页面以查看它现在是否存在,它会继续执行此操作直到在页面上发布时找到该产品。然而,我希望在产品发布前几个小时启动我的机器人,该机器人目前无法工作,因为在刷新页面大约 30 秒后,由于他们使用的反 ddos​​ 软件,我被禁止访问该页面。一种选择是增加刷新之间的延迟,但是我需要尽快 catch 该产品的发布,因此我试图找到一种方法,让我的程序可以等待/ sleep ,直到发布前 30 秒,但是我正在努力寻找一种方法来做到这一点。

最佳答案

只需以适当的毫秒数调用Thread.sleep:

public static void main(String[] args) throws InterruptedException {
long currentTime = System.currentTimeMillis();
long releaseTime = currentTime + 1000 * 60 * 60 * 24 * 3; // 3 days

Thread.sleep(releaseTime - currentTime);
}

另一种方法是使用 java.time 类:

public static void main(String[] args) throws InterruptedException {
LocalDateTime now = LocalDateTime.now();
LocalDateTime release = LocalDateTime.of(2019, 10, 30, 13, 30);

long sleepDuration = Duration.between(now, release).toMillis();
TimeUnit.MILLISECONDS.sleep(sleepDuration);
}

Java 9 向 Duration 类引入了新方法,例如 toSeconds()toMinutes() 等。

您还可以考虑使用 ScheduledExecutorService 来安排您的任务。如果您有多个任务需要调度并且不希望多个线程因此被阻塞,那么这尤其有用:

private static final ScheduledExecutorService service = new ScheduledThreadPoolExecutor(2);

private static ScheduledFuture<?> scheduleTask(Runnable task, LocalDateTime releaseTime) {
Duration duration = Duration.between(LocalDateTime.now(), releaseTime);
return service.schedule(task, duration.toSeconds(), TimeUnit.SECONDS);
}

一般来说,要 sleep 到下周四 10:59,您可以使用以下代码:

LocalDateTime release = LocalDateTime.now()
.with(TemporalAdjusters.nextOrSame(DayOfWeek.THURSDAY))
.withHour(10)
.withMinute(59);

Duration duration = Duration.between(LocalDateTime.now(), release);
TimeUnit.MILLISECONDS.sleep(duration.toMillis());

关于java - 等待/ sleep 直到特定时间(例如星期四 10 :59) in java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58490873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com