$npx -y skills add omnigentx/jarvis --skill scrape-webAccess and extract content from websites. Use when you need to read URL content, scrape data, or fetch information from blocked pages. Priority: serpapi → ScraplingServer get → fetch → stealthy_fetch.
| 1 | # Web Content Retrieval |
| 2 | |
| 3 | <tool_priority> |
| 4 | Escalation chain — follow this order strictly: |
| 5 | 1. serpapi (search/get) → Fast, stable, for most search queries. Always use `gl=vn`, `hl=vi`. |
| 6 | 2. ScraplingServer get → When accessing a specific URL directly |
| 7 | 3. ScraplingServer fetch → If get returns 403/empty |
| 8 | 4. ScraplingServer stealthy_fetch → If fetch is still blocked |
| 9 | </tool_priority> |
| 10 | |
| 11 | <rule> |
| 12 | DO NOT use ScraplingServer for search queries. Only use it when you need direct URL access that serpapi cannot provide. |
| 13 | </rule> |
| 14 | |
| 15 | ### When to Use What |
| 16 | |
| 17 | | Scenario | Tool | |
| 18 | |----------|------| |
| 19 | | General information search | `serpapi` → search | |
| 20 | | Google/Bing results | `serpapi` | |
| 21 | | Access specific user-provided URL | ScraplingServer `get` | |
| 22 | | URL returns 403/blocked | ScraplingServer `fetch` | |
| 23 | | Cloudflare/anti-bot protection | ScraplingServer `stealthy_fetch` | |
| 24 | | JS-rendered SPA | ScraplingServer `fetch` + `network_idle: true` | |
| 25 | |
| 26 | --- |
| 27 | |
| 28 | ## ScraplingServer — Fallback Details |
| 29 | |
| 30 | ### Per-Site Recommendations |
| 31 | |
| 32 | | Site | Tool | |
| 33 | |------|------| |
| 34 | | LinkedIn, Glassdoor, GitHub, Reddit | `get` | |
| 35 | | Telegram public channel | `get` + URL: `https://t.me/s/CHANNEL` | |
| 36 | | Twitter/X, Twitch, Facebook | `fetch` + `network_idle: true` | |
| 37 | | TikTok profile/page | `stealthy_fetch` + `network_idle: true`, `wait: 4000` | |
| 38 | | TikTok comments | `get` via internal API (see below) | |
| 39 | | Cloudflare-protected | `stealthy_fetch` + `solve_cloudflare: true` | |
| 40 | |
| 41 | ### Key Parameters |
| 42 | |
| 43 | - `extraction_type`: `"text"` · `"markdown"` · `"html"` |
| 44 | - `main_content_only: true` — strips nav/footer noise |
| 45 | - `css_selector` — target specific elements |
| 46 | - `network_idle: true` + `wait: 2000` — for lazy-loaded JS content |
| 47 | - `disable_resources: true` — faster (fetch/stealthy_fetch only) |
| 48 | |
| 49 | ### Bulk Fetching |
| 50 | |
| 51 | ``` |
| 52 | tool: bulk_get / bulk_fetch |
| 53 | urls: ["https://...", "https://..."] |
| 54 | ``` |
| 55 | |
| 56 | --- |
| 57 | |
| 58 | ## TikTok Comments API |
| 59 | |
| 60 | Comments don't render in DOM — call the internal API directly (no login needed): |
| 61 | |
| 62 | ``` |
| 63 | tool: get |
| 64 | url: https://www.tiktok.com/api/comment/list/ |
| 65 | params: { aweme_id: "VIDEO_ID", count: "10", cursor: "0", aid: "1988" } |
| 66 | headers: { Referer: "https://www.tiktok.com/@USER/video/VIDEO_ID" } |
| 67 | extraction_type: "html" |
| 68 | main_content_only: false |
| 69 | ``` |
| 70 | |
| 71 | Response JSON fields: `comments[].text`, `comments[].user.nickname`, `comments[].digg_count`, `total`, `has_more`. Paginate by incrementing `cursor` by 10. |
| 72 | |
| 73 | To get VIDEO_ID: `stealthy_fetch` the profile page as `html`, extract with regex `/@[\w.]+/video/(\d+)`. |