fix click
This commit is contained in:
+26
-17
@@ -51,59 +51,68 @@ class VisitScheduler:
|
||||
async def run(self) -> dict:
|
||||
"""
|
||||
Run scheduled visits.
|
||||
|
||||
|
||||
Returns:
|
||||
Statistics dict
|
||||
"""
|
||||
total_reading_time = 0
|
||||
|
||||
loop = asyncio.get_event_loop()
|
||||
|
||||
try:
|
||||
while True:
|
||||
if self.max_visits and self.visit_count >= self.max_visits:
|
||||
logger.info(f"Visit limit reached: {self.max_visits}")
|
||||
break
|
||||
|
||||
# Randomize parameters
|
||||
|
||||
# Randomize parameters once per cycle
|
||||
current_reading = random.randint(self.min_reading, self.max_reading)
|
||||
current_delay = random.randint(self.min_delay, self.max_delay)
|
||||
|
||||
|
||||
self.visit_count += 1
|
||||
|
||||
|
||||
# Record start time so the next visit fires strictly on the timer
|
||||
tick_start = loop.time()
|
||||
|
||||
logger.info(
|
||||
f"Visit {self.visit_count}/{'∞' if not self.max_visits else self.max_visits}: "
|
||||
f"reading={current_reading}s"
|
||||
f"reading={current_reading}s delay={current_delay}s"
|
||||
)
|
||||
|
||||
|
||||
# Visit page
|
||||
result = await self.browser_service.visit_page(
|
||||
self.url, current_reading
|
||||
)
|
||||
|
||||
|
||||
if result.success:
|
||||
self.successful += 1
|
||||
total_reading_time += current_reading
|
||||
else:
|
||||
self.failed += 1
|
||||
|
||||
|
||||
# Notify about visit completion
|
||||
if self.on_visit_complete:
|
||||
await self.on_visit_complete(
|
||||
self.visit_count, result, current_delay, current_reading
|
||||
)
|
||||
|
||||
|
||||
if self.max_visits and self.visit_count >= self.max_visits:
|
||||
break
|
||||
|
||||
# Wait before next visit
|
||||
|
||||
# Wait only the remaining time so that the period between visit
|
||||
# starts is exactly current_delay (independent of visit duration)
|
||||
elapsed = loop.time() - tick_start
|
||||
remaining = current_delay - elapsed
|
||||
|
||||
if self.on_progress:
|
||||
await self.on_progress(self.visit_count, current_delay)
|
||||
|
||||
await asyncio.sleep(current_delay)
|
||||
|
||||
|
||||
if remaining > 0:
|
||||
await asyncio.sleep(remaining)
|
||||
|
||||
except asyncio.CancelledError:
|
||||
logger.info("Visit scheduler cancelled")
|
||||
raise
|
||||
|
||||
|
||||
return {
|
||||
"total_visits": self.visit_count,
|
||||
"successful": self.successful,
|
||||
|
||||
Reference in New Issue
Block a user