LinkedIn human-mode
Drive your real Chrome via the claude-in-chrome MCP. Lower-risk than Playwright scraping because it uses your existing browser session, but halt on account warnings, captchas, or login walls. Slower than Playwright scraping (~15-30s/JD) and designed for careful recovery. See CLAUDE.md §8.122.
- ✅ Open your daily Chrome (the one LinkedIn already trusts)
- ✅ Make sure the claude-in-chrome extension is installed and connected (sidebar shows the Claude icon active)
- ✅ Log into linkedin.com normally — complete any "verify your identity" prompts LinkedIn shows
- ✅ Keep at least one tab open — the agent will navigate that tab through search URLs and JD pages
The agent will iterate 0 search cells (keyword × location × time-frame). With ~15-30s per JD and ~8 cards/cell, expect ~0 minutes for the full matrix.
The agent will use the claude-in-chrome MCP to drive your Chrome: navigate each search URL, scroll, click cards, extract JD bodies, and POST to /api/linkedin-human/enqueue. The existing pipeline (enrich + score + jd_preprocess) picks them up unchanged.
Run a LinkedIn human-mode scrape session via my claude-in-chrome Chrome.
Search matrix:
keywords:
locations: india, worldwide
time_frames: 24h, week
work_modes: remote, hybrid, onsite
max_cards_per_cell: 8
total cells: 0
Steps for each cell:
1. POST to /api/linkedin-human/preview-matrix with the above filters to get the URL list.
2. For each URL in the matrix:
a. Use mcp__Claude_in_Chrome__navigate to that URL on my LinkedIn tab.
b. Wait ~3s, then run mcp__Claude_in_Chrome__javascript_tool with the JS_EXTRACT_SEARCH_CARDS snippet from src/apply/linkedin_human_mode.py to get card metadata.
c. For up to 8 cards in the result:
- Navigate to the card's apply_url.
- Click "See more" on the JD body if present (JS_CLICK_SHOW_MORE).
- Run JS_EXTRACT_JD_BODY to get the full JD text (must be >=200 chars).
- Build a card dict via build_scraped_card (see linkedin_human_mode.py for the shape) and accumulate into a list.
d. Pause 4-8 random seconds between JD page loads to look human.
3. After every ~10 cards or after each cell finishes, POST the accumulated cards to /api/linkedin-human/enqueue (body: {"cards": [...]}).
4. The existing pipeline (enrich + score + jd_preprocess) picks them up automatically.
Stop conditions:
- Any LinkedIn login redirect, captcha, or "unusual activity" page → STOP IMMEDIATELY, surface the error, do not continue.
- 30 cards harvested total → safe natural stop.
- I say "stop" or "pause" in chat.
Be conversational about progress. Don't rush — pacing matters.Each row = one card the agent enqueued via human-mode. They flow into the same pipeline_scraped queue as the Playwright scraper — enrich + score + jd_preprocess pick them up automatically.