Automatically detect and fix broken LinkedIn selectors. This skill fires when the scraper reports that LinkedIn changed their page structure. It reads the DOM diagnostic, analyzes the new structure, generates updated CSS selectors, and writes them to selectors.json so the scraper works again. Triggers: "fix the scraper", "selectors are broken", "collection failed", "scraper isn't working", or automatically when any LFT skill detects a needs-repair.json flag.
How this skill is triggered — by the user, by Claude, or both
Slash command
/linkedin-feed-tracker:self-healThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
When LinkedIn changes their DOM, scrapers break. This skill reads the diagnostic
When LinkedIn changes their DOM, scrapers break. This skill reads the diagnostic dump and writes new selectors so everything works again without code changes.
Before doing anything else, check if the scraper needs repair:
cat "${CLAUDE_PLUGIN_ROOT}/scripts/data/needs-repair.json" 2>/dev/null
If this file exists, STOP your current task and run the repair flow below first. Tell the user: "I noticed the scraper ran into a LinkedIn change. Let me fix that first."
cat "${CLAUDE_PLUGIN_ROOT}/scripts/data/diagnostic.json" 2>/dev/null
This file contains:
sampleLinks: what profile links look like now (href, text, child tags)containerCounts: which known post container selectors still workrepeatedClasses: most common CSS classes on the page (the new selectors are in here)largeLists: list-like elements that probably contain cardstimeElements: how time/date is renderedpageTextSample: raw text from the pagecat "${CLAUDE_PLUGIN_ROOT}/scripts/data/selectors.json"
Based on the diagnostic, figure out:
For connections scraper (if scraper === 'connections'):
connections.strategies array in selectors.jsonFor profile scraper (if scraper === 'profile'):
profile section in selectors.jsonFor feed scraper (if scraper === 'feed'):
feed section in selectors.jsonWrite the updated selectors.json:
cat > "${CLAUDE_PLUGIN_ROOT}/scripts/data/selectors.json" << 'SELECTORS_EOF'
{
... updated config ...
}
SELECTORS_EOF
rm -f "${CLAUDE_PLUGIN_ROOT}/scripts/data/needs-repair.json"
rm -f "${CLAUDE_PLUGIN_ROOT}/scripts/data/diagnostic.json"
Say: "LinkedIn changed their page structure. I've updated the selectors. Double-click 'Collect Now' to try again."
Do NOT say anything about JSON files, CSS selectors, or DOM diagnostics. Keep it simple.
npx claudepluginhub stevegustafson32/linkedin-feed-tracker-plugin --plugin linkedin-feed-trackerBuilds AI-generated Bright Data scrapers from natural language via `bdata scraper create` and runs collectors against URLs with `bdata scraper run`. Activates when users describe data they want extracted from a URL.
Diagnoses and fixes broken football data scrapers and pipelines. Handles HTTP errors, parse failures, API schema changes, and upstream library issues.
Automatically scrapes websites by analyzing page structure, handling pagination/anti-blocking, discovering article series using Playwright and Crawl4AI. Zero config needed.