jackwener/OpenCLI · error · CommandExecutionError
RATE_LIMIT
RATE_LIMIT
Error message
${payload.message || 'huodongxing events was rate limited by www.huodongxing.com'} What it means
The in-page extractor signalled code 'RATE_LIMIT', meaning www.huodongxing.com rate-limited the session. requireExtractionRows converts it into a CommandExecutionError, forwarding the payload's message and hint when present.
Source
Thrown at clis/huodongxing/events.js:285
}
return { ok: true, rows };
}
function isTransientAccessPayload(result) {
return unwrapEvaluateResult(result)?.code === 'TRANSIENT_ACCESS';
}
function requireExtractionRows(result) {
const payload = unwrapEvaluateResult(result);
if (payload?.ok === true && Array.isArray(payload.rows)) return payload.rows;
if (payload?.ok === true) {
throw new CommandExecutionError(
'huodongxing events returned malformed extraction rows',
'Expected browser extraction payload rows to be an array.',
);
}
if (payload?.code === 'RATE_LIMIT') {
throw new CommandExecutionError(
payload.message || 'huodongxing events was rate limited by www.huodongxing.com',
payload.hint || 'Wait a few minutes and retry from a real browser session.',
);
}
if (payload?.code === 'TRANSIENT_ACCESS') {
throw new CommandExecutionError(
payload.message || 'huodongxing events page returned a temporary busy/access page',
payload.hint || 'Wait and retry from the same browser session.',
);
}
if (payload?.code === 'INVALID_LIMIT') {
throw new ArgumentError(payload.message || 'huodongxing limit must be a positive integer <= 50');
}
if (payload?.code === 'EMPTY_RESULT') {
throw new EmptyResultError(
'huodongxing events',
payload.hint || 'No Huodongxing event cards were found. The page may be empty.',
);View on GitHub (pinned to 49907e53dc)
Solutions
- Wait several minutes before retrying
- Run from a real browser session with normal cookies (as the hint suggests)
- Reduce request frequency / add delays between calls
- Change IP or network if the block persists
Defensive patterns
Strategy: retry
Try / catch
try { const rows = extractEventRows(limit); } catch (e) { if (e instanceof CommandExecutionError && e.message.includes('rate limited')) { await sleep(minutes(5)); return extractEventRows(limit); } throw e; } Prevention
- Throttle requests — add delays between event queries
- Scrape from a genuine logged-in browser session, not a bare headless one
- Batch date-range queries instead of looping per-day
- Back off exponentially when this error appears
When it happens
Trigger: Scraping too many events pages in a short window, or reusing an automated session the site has flagged, causing the extraction payload to come back with code: 'RATE_LIMIT'.
Common situations: Tight loops over date ranges or pagination; shared IP under heavy load; missing cookies from a real logged-in browsing session.
Related errors
- HTTP ${code}
- [taxonomy=relay_unavailable] site=powerchina command=search
- Search failed: HTTP ${res.status}
- Twitter device-follow returned non-JSON response: ${data.det
- Sogou Weixin blocked this search request
AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29).
Data as JSON: /api/errors/d6aa06437c91f872.
Report an issue: GitHub.