scrape_with_actions
Laksanakan rangkaian tindakan pelayar termasuk klik, tatal, taip dan auto-isi borang dengan tangkapan skrin. Sesuai untuk aliran log masuk, tatal tak terhingga, dialog modal dan tapak kompleks yang banyak JavaScript.
Kes Penggunaan
Aliran Log Masuk
Automasikan borang log masuk dan akses kandungan disahkan di sebalik dinding log masuk
Tatal Tak Terhingga
Scrape kandungan daripada halaman tatal tak terhingga seperti suapan media sosial dan penyenaraian produk
Dialog Modal
Berinteraksi dengan popup, modal dan tindanan dinamik
Tapak Banyak JavaScript
Kendalikan SPA dan tapak dengan pemuatan kandungan dinamik melalui AJAX
Borang Berbilang Langkah
Navigasi melalui wizard berbilang langkah dan penyerahan borang kompleks
Pengujian Visual
Tangkap tangkapan skrin pada setiap langkah untuk penyahpepijatan dan pengujian regresi visual
Endpoint
/api/v1/tools/scrape_with_actionsParameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
url | string | Required | - | URL untuk dimuatkan sebelum menjalankan rangkaian tindakan Example: https://app.example.com/dashboard |
actions | array | Required | - | Senarai tersusun 1-20 tindakan pelayar untuk dijalankan sebelum scraping. Setiap item ialah objek dengan `type` iaitu `wait`, `click`, `type`, `press`, `scroll`, `screenshot`, `executeJavaScript`, `select`, `hover` atau `navigate`, ditambah medan khusus mengikut jenis: `selector` (sasaran CSS), `text` (untuk `type`), `key` (untuk `press`), `script` (untuk `executeJavaScript`), `duration`/`condition` (untuk `wait`), `button`/`clickCount`/`delay` (untuk `click`), `direction`/`distance`/`toElement` (untuk `scroll`) `fullPage`/`quality`/`format` (untuk `screenshot`), `value` atau `values` (untuk `select`) dan `url`/`waitUntil` (untuk `navigate`). `select` menerima satu `value` atau tatasusunan `values`, dan rentetan biasa dipadankan dengan opsyen mengikut nilainya atau label yang dipaparkan; `hover` memerlukan `selector`, dengan `force` dan `position` sebagai pilihan. Pilihan pada mana-mana tindakan: `timeout` (setiap tindakan, lalai 10000ms — berbeza daripada `browserOptions.timeout` yang membajet keseluruhan rantaian), `description`, `continueOnError` (lalai false), `retries` (0-5, lalai 1) dan `captureAfter` (lalai false). Example: [{"type": "click", "selector": "#login"}, {"type": "type", "selector": "#email", "text": "user@example.com"}, {"type": "wait", "duration": 1000}, {"type": "screenshot"}] |
formats | array | Optional | ["json"] | Format output untuk dikembalikan: `markdown`, `html`, `json`, `text` atau `screenshots` Example: ["markdown", "screenshots"] |
captureScreenshots | boolean | Optional | true | Tangkap tangkapan skrin semasa pelaksanaan tindakan Example: true |
formAutoFill | object | Optional | - | Isi dan serah borang dalam satu langkah. Struktur: `{ fields: [{ selector, value, type: text|select|checkbox|radio|file, waitAfter }], submitSelector, waitAfterSubmit }` — `waitAfterSubmit` lalai kepada 2000ms. Example: {"fields": [{"selector": "#email", "value": "user@example.com", "type": "text"}], "submitSelector": "#login"} |
browserOptions | object | Optional | - | Konfigurasi pelayar: `headless` (lalai true), `userAgent`, `viewportWidth` (lalai 1280, julat 800-1920), `viewportHeight` (lalai 720, julat 600-1080), `timeout` (lalai 30000ms, julat 10000-120000) dan `stealth` (lalai false). Kekalkan `timeout` dalam tetingkap REST ~25s. Tetapkan `stealth` kepada true untuk menjalankan rantaian tindakan dalam enjin senyap Chromium pada profil `medium`, bukan kumpulan pelayar standard — boolean itu satu-satunya kawalan, jadi tahap, rawakan cap jari dan pilihan enjin tidak boleh ditetapkan dari sini. Ia lebih lambat bermula, dan ia memaparkan JavaScript, bukan menyelesaikan cabaran. Example: {"viewportWidth": 1440, "viewportHeight": 900, "timeout": 20000} |
extractionOptions | object | Optional | - | Pilihan pengekstrakan kandungan: `selectors` (peta CSS kunci→nilai bagi data untuk dikeluarkan), `includeMetadata` (lalai true), `includeLinks` (lalai true) dan `includeImages` (lalai true). Example: {"selectors": {"title": "h1", "price": ".price"}} |
continueOnActionError | boolean | Optional | false | Teruskan menjalankan tindakan yang selebihnya apabila satu gagal, bukannya membatalkan rangkaian Example: false |
maxRetries | number | Optional | 1 | Bilangan maksimum percubaan semula untuk keseluruhan larian apabila gagal (0-3) Example: 1 |
respect_robots | boolean | Optional | true | Hormati robots.txt tapak sasaran. Jika ditinggalkan, nilai lalai yang patuh (`true`) terpakai: URL yang dilarang untuk `CrawlForge` ditolak sebelum pelayar dibuka dan titik akhir ini tidak mengenakan sebarang caj untuknya, dan setiap tindakan `navigate` diperiksa dengan cara yang sama. Tetapkan kepada `false` hanya untuk sasaran yang anda mempunyai perjanjian sendiri dengannya — tindakan mengatasi itu direkodkan pada API key anda. Example: true |
Jenis Tindakan Tersedia
{"type": "wait", "duration": 2000}{"type": "click", "selector": "#button"}{"type": "type", "selector": "#search", "text": "query"}{"type": "press", "key": "Enter"}{"type": "scroll", "toElement": "#content"}{"type": "screenshot"}{"type": "executeJavaScript", "script": "window.scrollTo(0, 0)"}<select>: selector menamakan menu jatuh turun, kemudian value (satu opsyen) atau values (beberapa). Rentetan biasa dipadankan dengan opsyen mengikut nilainya atau label yang dipaparkan.selector — untuk menu dan tooltip yang hanya muncul semasa tuding. force dan position berkelakuan sama seperti pada click.url lain dalam sesi pelayar yang sama, jadi kuki, localStorage dan keadaan log masuk daripada tindakan terdahulu kekal. waitUntil pilihan ialah load, domcontentloaded (lalai), networkidle, atau commit. URL baharu itu melalui pemeriksaan robots.txt dan SSRF yang sama seperti URL awal, jadi ia bukan jalan untuk memintas kawalan tersebut.Contoh Permintaan
curl -X POST https://crawlforge.dev/api/v1/tools/scrape_with_actions \
-H "X-API-Key: cf_test_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://app.example.com/dashboard",
"actions": [
{"type": "click", "selector": "#login"},
{"type": "type", "selector": "#email", "text": "user@example.com"},
{"type": "type", "selector": "#password", "text": "secret123"},
{"type": "wait", "duration": 1000},
{"type": "screenshot"}
],
"formats": ["markdown", "screenshots"]
}'Contoh Respons
{ "success": true, "data": { "url": "https://app.example.com/dashboard", "actionsExecuted": 4, "results": { "markdown": "# Dashboard\n\nWelcome back — you are now signed in...", "screenshots": [ "data:image/png;base64,iVBORw0KGgoAAAANS...(truncated)" ] }, "actionLog": [ { "type": "click", "selector": "#login", "success": true }, { "type": "type", "selector": "#email", "success": true }, { "type": "wait", "duration": 1000, "success": true }, { "type": "screenshot", "success": true } ] }, "credits_used": 5, "credits_remaining": 995, "processing_time": 9000}data.urlURL yang dimuatkan sebelum rangkaian tindakan dijalankandata.actionsExecutedBilangan tindakan yang berjaya dijalankandata.results.markdownKandungan halaman dalam setiap format yang diminta selepas semua tindakan selesaidata.results.screenshotsTangkapan skrin terenkod base64 yang ditangkap semasa larian (data:image/png;base64,…)data.actionLogLog bagi setiap tindakan dengan jenis, selector dan status kejayaancredits_usedCredits ditolak untuk permintaan ini (5 setiap scrape)processing_timeJumlah masa dalam ms termasuk semua tindakan dan tungguPengendalian Ralat
Runtime pelayar tidak dikonfigurasikan (503 TOOL_NOT_AVAILABLE)
Alat ini memerlukan runtime automasi pelayar. Apabila bahagian belakang pelaksanaan terhos tidak dikonfigurasikan, panggilan memulangkan 503 serta-merta dan tiada credits dicaj.
Bahagian belakang pelaksanaan tamat masa (504 MCP_UPSTREAM_TIMEOUT)
Navigasi serta rantaian tindakan melebihi bajet masa bahagian belakang pelaksanaan. Pendekkan tempoh menunggu, kurangkan bilangan tindakan, atau cuba semula. Kegagalan tidak dicaj.
Disekat oleh robots.txt (502 TOOL_ERROR)
robots.txt sasaran melarang URL ini untuk CrawlForge, jadi tiada pelayar dilancarkan dan tiada apa-apa dicaj. Setiap tindakan navigate diperiksa dengan cara yang sama, bukan hanya URL awal. Tetapkan respect_robots: false untuk mengatasinya jika anda mempunyai perjanjian sendiri dengan sasaran — tindakan mengatasi itu direkodkan pada API key anda.
Tindakan Tidak Sah (400 Bad Request)
Satu atau lebih tindakan mempunyai parameter tidak sah. Semak jenis tindakan dan medan yang diperlukan.
Credits Tidak Mencukupi (402 Payment Required)
Akaun anda tidak mempunyai credits yang mencukupi (perlu 5). Beli lebih banyak credits atau naik taraf pelan anda.
Had Kadar Melebihi (429 Too Many Requests)
Anda telah melebihi had kadar pelan anda. Tunggu sebentar atau naik taraf pelan anda untuk had lebih tinggi.
Kos Credit
Pelan Free: 1,000 credits percubaan sekali sahaja = 200 rangkaian tindakan
Pelan Hobby: 5,000 credits/bulan = 1,000 rangkaian tindakan ($19/mo)
Pelan Professional: 50,000 credits/bulan = 10,000 rangkaian tindakan ($99/mo)
Pelan Business: 250,000 credits/bulan = 50,000 rangkaian tindakan ($399/mo)