jackwener/OpenCLI · error · CommandExecutionError
LinkedIn Learning feedRecommendationGroups returned no parse
Error message
LinkedIn Learning feedRecommendationGroups returned no parseable cards with slug identity
What it means
The trending command scraped LinkedIn Learning's feedRecommendationGroups HTML and saw at least one card node (sawCards true) but could not extract any usable row: no card carried a parseable slug identity. The library throws CommandExecutionError to distinguish 'LinkedIn changed/obfuscated its markup or cards lack slugs' from 'genuinely empty recommendations' (EmptyResultError).
Source
Thrown at clis/linkedin-learning/trending.js:77
const cards = Array.isArray(carousel?.cards) ? carousel.cards : [];
for (const card of cards) {
sawCards = true;
if (rows.length >= limit) break;
const slug = card?.slug;
if (!slug || seen.has(slug)) continue;
seen.add(slug);
const row = parseCard(card, carousel, rank);
if (!row) continue;
rows.push(row);
rank += 1;
}
if (rows.length >= limit) break;
}
if (rows.length >= limit) break;
}
if (rows.length === 0) {
if (sawCards) {
throw new CommandExecutionError('LinkedIn Learning feedRecommendationGroups returned no parseable cards with slug identity');
}
throw new EmptyResultError('LinkedIn Learning returned no personalized recommendations');
}
return rows;
},
});
export const __test__ = { parseCard };
View on GitHub (pinned to 49907e53dc)
Solutions
- Re-authenticate with a fresh LinkedIn session (run the site auth flow) so the real personalized feed renders.
- Update the library to a version that matches current LinkedIn Learning markup.
- Confirm the account actually has personalized recommendations (open LinkedIn Learning in a browser) — new/empty accounts may serve slug-less promo cards.
- Retry later if LinkedIn is mid-rollout of a layout change; check the project issue tracker.
Example fix
// before linkedin trending --site linkedin-learning // throws 'no parseable cards with slug identity' // after linkedin auth linkedin // refresh li_at session linkedin trending --site linkedin-learning // cards now parse
Defensive patterns
Strategy: try-catch
Validate before calling
null
Type guard
null
Try / catch
try {
const rows = await run('linkedin-learning trending');
} catch (e) {
if (/no parseable cards with slug identity/.test(e.message)) {
// scraper markup mismatch: alert maintainers or fall back to another source
} else if (e.name === 'EmptyResultError') {
return [];
}
throw e;
} Prevention
- Keep the library updated against LinkedIn markup changes.
- Run the auth flow first so the real feed renders.
- Distinguish EmptyResultError from CommandExecutionError when handling.
When it happens
Trigger: Calling the linkedin-learning trending command when the feedRecommendationGroups payload contains card elements but parseCard fails to derive a slug from every one of them, so rows stays empty while sawCards is true.
Common situations: LinkedIn changed its feed card markup or slug attribute names; a partially rendered feed where cards exist but hrefs/slugs are absent; a session/region variant serving a different layout; scraping a deprecated feed component.
Related errors
- No threads found on bbs.hupu.com — page structure may have c
- Trip.com tour search captured products but none carried a na
- Failed to parse visible Weibo favorites
- Not a git repository
- Working tree not clean: ${status}
AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29).
Data as JSON: /api/errors/b13db3216a565326.
Report an issue: GitHub.