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

  1. Re-authenticate with a fresh LinkedIn session (run the site auth flow) so the real personalized feed renders.
  2. Update the library to a version that matches current LinkedIn Learning markup.
  3. Confirm the account actually has personalized recommendations (open LinkedIn Learning in a browser) — new/empty accounts may serve slug-less promo cards.
  4. 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

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


AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29). Data as JSON: /api/errors/b13db3216a565326. Report an issue: GitHub.