ProdukIntegrasiSumber DayaDokumentasiHarga
Mulai Sekarang

© 2026 CapSolver. All rights reserved.

Hubungi Kami

Slack: lola@capsolver.com

Produk

  • reCAPTCHA v2
  • reCAPTCHA v3
  • Cloudflare Turnstile
  • Cloudflare Challenge
  • AWS WAF
  • Ekstensi Browser
  • Lebih banyak jenis CAPTCHA

Integrasi

  • Selenium
  • Playwright
  • Puppeteer
  • n8n
  • Mitra
  • Lihat semua integrasi

Sumber Daya

  • Program Referensi
  • Dokumentasi
  • Referensi API
  • Blog
  • FAQ
  • Glosarium
  • Status

Legal

  • Ketentuan Layanan
  • Kebijakan Privasi
  • Kebijakan Pengembalian Dana
  • Jangan jual informasi pribadi saya
//Cara Memecahkan Masalah AWS WAF di n8n dengan CapSolver
Mar12, 2026

Cara Memecahkan Masalah AWS WAF di n8n dengan CapSolver

Ethan Collins

Ethan Collins

Pattern Recognition Specialist

AWS WAF (Web Application Firewall) adalah sistem perlindungan bot kelas perusahaan Amazon yang digunakan oleh beberapa situs web terbesar di internet. Tidak seperti CAPTCHA tradisional yang menampilkan teka-teki gambar atau kotak centang, AWS WAF menggunakan tantangan tak terlihat dan verifikasi berbasis token, membuatnya sangat sulit untuk ditangani oleh alat otomatis.

Bagaimana jika Anda dapat secara otomatis menyelesaikan tantangan AWS WAF dalam alur kerja n8n Anda? Baik Anda membangun API pemecah yang dapat digunakan kembali, mengikis situs web yang dilindungi CAPTCHA, atau mengotomatiskan formulir login, Anda dapat melakukan semua ini tanpa menulis satu baris kode tradisional pun.

Dalam panduan ini, Anda akan belajar cara menggabungkan n8n (alat otomatisasi alur kerja visual) dengan CapSolver (layanan pemecahan CAPTCHA bertenaga AI) untuk menyelesaikan tantangan AWS WAF sesuai permintaan. Ini dapat berfungsi sebagai titik akhir API mandiri atau sebagai langkah dalam alur kerja otomatisasi yang lebih besar.

Apa yang akan kita bangun:

API Pemecah — titik akhir yang dapat digunakan kembali yang dapat dipanggil oleh alat lain:

  • API Pemecah AWS WAF

Alur Kerja Penggunaan Langsung — menggabungkan CapSolver sebagai langkah dalam otomatisasi yang lebih besar:

  • Scraper Harga & Produk yang memecahkan AWS WAF, mengambil halaman yang dilindungi, dan memperingatkan Anda tentang perubahan harga
  • Otomatisasi Login Akun yang memecahkan AWS WAF sebelum mengirimkan kredensial

Apa itu AWS WAF?

AWS WAF (Web Application Firewall) adalah layanan mitigasi bot dan keamanan web Amazon Web Services. Ini melindungi situs web dari eksploitasi web umum, lalu lintas bot, dan penyalahgunaan otomatis. Banyak situs web dengan lalu lintas tinggi, terutama platform e-commerce, layanan keuangan, dan aplikasi perusahaan, menggunakan AWS WAF untuk membatasi akses di balik tantangan CAPTCHA yang tidak terlihat.

Bagaimana AWS WAF berbeda dari reCAPTCHA atau Turnstile:

  • Tidak ada Kunci Situs yang Diperlukan — Tidak seperti reCAPTCHA atau Turnstile, AWS WAF tidak mengekspos kunci situs publik. Yang Anda butuhkan hanyalah websiteURL untuk memulai pemecahan.
  • Autentikasi Berbasis Cookie — Alih-alih mengembalikan token yang Anda kirimkan dalam bidang formulir, AWS WAF mengembalikan cookie aws-waf-token. Ini harus dikirim melalui header HTTP Cookie pada permintaan berikutnya.
  • Beberapa Parameter Opsional — AWS WAF dapat mengekspos awsKey, awsIv, awsContext, awsChallengeJS, dan parameter lain tergantung pada konfigurasi situs. Ini opsional dan hanya diperlukan untuk implementasi tertentu.
  • Tantangan Tak Terlihat — Tantangan AWS WAF biasanya berjalan sepenuhnya di latar belakang menggunakan JavaScript, tanpa widget yang terlihat untuk interaksi pengguna.

Bukan CloudFront. AWS WAF adalah lapisan firewall di depan aplikasi web Anda. CloudFront adalah CDN Amazon. Sebuah situs dapat menggunakan CloudFront tanpa AWS WAF, atau AWS WAF tanpa CloudFront. Ini adalah layanan independen, tetapi sering digunakan bersama.


Prasyarat

Sebelum kita mulai, pastikan Anda memiliki yang berikut:

  1. Instans n8n — Self-hosted atau n8n Cloud
  2. Akun CapSolver — Daftar di sini dan dapatkan kunci API Anda
  3. Node n8n CapSolver — Sudah tersedia sebagai node resmi di n8n (tidak perlu instalasi)

Penting: Pastikan akun CapSolver Anda memiliki saldo yang cukup. Tugas pemecahan AWS WAF mengonsumsi kredit berdasarkan penggunaan.


Menyiapkan CapSolver di n8n

CapSolver tersedia sebagai integrasi resmi di n8n. Tidak perlu menginstal node komunitas. Anda akan menemukannya langsung di panel node saat membangun alur kerja Anda.

Karena ini adalah integrasi resmi, Anda perlu membuat kredensial di n8n agar node CapSolver dapat mengautentikasi dengan akun Anda.

Langkah 1: Buka Halaman Kredensial

Navigasikan ke instans n8n Anda dan buka Settings -> Credentials. Ini akan menampilkan semua kredensial yang telah Anda siapkan.

Halaman kredensial n8n yang menampilkan akun CapSolver

Langkah 2: Buat Kredensial CapSolver

  1. Klik Create credential (kanan atas)
  2. Cari "CapSolver" dan pilih CapSolver API
  3. Masukkan Kunci API Anda — salin langsung dari Dasbor CapSolver
  4. Biarkan Allowed HTTP Request Domains sebagai All (default)
  5. Klik Save

n8n akan secara otomatis menguji koneksi. Anda akan melihat spanduk hijau "Connection tested successfully" yang mengonfirmasi bahwa kunci API Anda valid.

Pengaturan kredensial CapSolver dengan uji koneksi berhasil

Penting: Setiap node CapSolver dalam alur kerja Anda akan merujuk kredensial ini. Anda hanya perlu membuatnya sekali. Semua alur kerja pemecah akan berbagi kredensial yang sama.

Sekarang Anda siap untuk membangun alur kerja pemecah AWS WAF Anda!


Cara Mengidentifikasi Parameter AWS WAF

Sebelum Anda dapat menyelesaikan tantangan AWS WAF, Anda perlu mengonfirmasi bahwa situs target menggunakan AWS WAF dan mengumpulkan parameter opsional apa pun. Cara termudah untuk melakukan ini adalah dengan menggunakan ekstensi browser CapSolver yang dikombinasikan dengan inspeksi manual.

Langkah 1: Cari Tanda-tanda AWS WAF

Navigasikan ke situs web target dan buka DevTools (F12). Cari tanda-tanda yang jelas ini:

  • Cookie — Periksa cookie aws-waf-token di tab Aplikasi
  • Permintaan Jaringan — Cari permintaan ke captcha.awswaf.com atau URL yang berisi challenge.js
  • Header Respons — AWS WAF biasanya mengembalikan header x-amzn-waf-*

Langkah 2: Kumpulkan Parameter Opsional (Jika Diperlukan)

Sebagian besar pemecahan AWS WAF hanya memerlukan websiteURL. Namun, beberapa situs mungkin mengekspos parameter tambahan yang dapat meningkatkan akurasi pemecahan.

Parameter Tempat Mencari Deskripsi
awsKey Sumber Halaman / Variabel JS Nilai kunci yang dikembalikan dari halaman CAPTCHA
awsIv Sumber Halaman / Variabel JS Nilai iv yang dikembalikan dari halaman CAPTCHA
awsContext Sumber Halaman / Variabel JS Nilai konteks yang dikembalikan dari halaman CAPTCHA
awsChallengeJS Tab Jaringan URL challenge.js (misalnya, https://captcha.awswaf.com/.../challenge.js)
awsApiJs Tab Jaringan URL jsapi.js
awsProblemUrl Tab Jaringan URL titik akhir masalah
awsApiKey Tab Jaringan Nilai api_key dari titik akhir masalah
awsExistingToken Cookie aws-waf-token sebelumnya jika memperbarui

Tip: Sebagian besar situs hanya memerlukan websiteURL. Coba gunakan hanya parameter itu terlebih dahulu, dan hanya tambahkan parameter opsional jika token tidak diterima.

Untuk panduan yang lebih rinci tentang mengidentifikasi parameter CAPTCHA, lihat dokumentasi resmi CapSolver.


Alur Kerja: API Pemecah AWS WAF

Alur kerja ini akan membuat titik akhir API POST yang menerima parameter AWS WAF dan mengembalikan token cookie yang dipecahkan.

Alur kerja pemecah AWS WAF di n8n

Cara Kerjanya

Alur kerja terdiri dari empat node:

  1. Webhook — Menerima permintaan POST masuk yang berisi parameter AWS WAF
  2. AWS WAF — Mengirim tantangan ke CapSolver dan menunggu pemecahan
  3. Kesalahan CapSolver? — Node IF yang bercabang berdasarkan apakah pemecahan gagal (yaitu, $json.error tidak kosong)
  4. Respons ke Webhook — Mengembalikan solusi jika berhasil, atau {"error": "..."} jika gagal

Konfigurasi Node

1. Node Webhook

Pengaturan Nilai
Metode HTTP POST
Jalur solver-aws-waf
Respons Response Node

Ini akan membuat titik akhir di https://your-n8n-instance.com/webhook/solver-aws-waf.

2. Node CapSolver AWS WAF

Parameter Nilai Deskripsi
Operasi AWS WAF Harus diatur ke AWS WAF
Tipe AntiAwsWafTaskProxyLess Tidak ada proxy yang diperlukan (default). Gunakan AntiAwsWafTask dengan proxy untuk situs yang lebih ketat
URL Situs Web {{ $json.body.websiteURL }} URL halaman tempat tantangan AWS WAF berada
awsKey (Opsional) Nilai kunci yang dikembalikan dari halaman CAPTCHA
awsIv (Opsional) Nilai iv yang dikembalikan dari halaman CAPTCHA
awsContext (Opsional) Nilai konteks yang dikembalikan dari halaman CAPTCHA
awsChallengeJS (Opsional) Tautan challenge.js
awsApiJs (Opsional) Tautan jsapi.js

Perbedaan utama dari Turnstile/reCAPTCHA: AWS WAF tidak memerlukan websiteKey. Hanya websiteURL yang wajib. Pastikan juga untuk memilih kredensial CapSolver Anda di node ini.

3. Node Kesalahan CapSolver? (IF)

Pengaturan Nilai
Kondisi ={{ $json.error }} tidak kosong
Cabang Benar Rute ke node Webhook respons kesalahan
Cabang Salah Rute ke node Webhook respons berhasil

Ini membuat jalur kesalahan eksplisit di kanvas. Karena node CapSolver diatur untuk melanjutkan saat terjadi kesalahan (onError: continueRegularOutput), kegagalan akan tiba di sini sebagai {"error": "..."} daripada membuat alur kerja crash.

4. Node Respons Webhook

Cabang Berhasil (output False dari Kesalahan CapSolver?):

Pengaturan Nilai
Format Respons JSON
Isi Respons ={{ JSON.stringify($json.data) }}

Cabang Kesalahan (output True dari Kesalahan CapSolver?):

Pengaturan Nilai
Format Respons JSON
Isi Respons ={{ JSON.stringify({ error: $json.error }) }}

Pesan kesalahan akan mengikuti salah satu dari dua format, tergantung pada titik kegagalan:

Titik Kegagalan Format
Pembuatan tugas ditolak (kunci salah, saldo tidak cukup, data tidak valid, dll.) {"error": "Failed to create task: Request failed with status code 400"}
Tugas dibuat tetapi gagal memecahkan CAPTCHA {"error": "Solve failed: <reason>"}
Pemecahan waktu habis setelah 120 detik {"error": "Get task result timeout: unable to solve within 120000 seconds"}

Catatan: Kegagalan pembuatan tugas (kunci API yang salah, saldo nol, data tugas yang tidak valid) semuanya akan muncul sebagai pesan HTTP 400 yang sama. Node n8n menangkap pengecualian HTTP sebelum membaca isi kesalahan CapSolver.

Contoh Kesalahan Umum:

json Copy
{"error": "Failed to create task: Request failed with status code 400"}
{"error": "Solve failed: Invalid parameters"}
{"error": "Get task result timeout: unable to solve within 120000 seconds"}

Pengujian

Kirim permintaan POST ke titik akhir Webhook Anda:

bash Copy
curl -X POST https://your-n8n-instance.com/webhook/solver-aws-waf \
  -H "Content-Type: application/json" \
  -d '{
    "websiteURL": "https://example.com/login"
  }'

Respons yang Diharapkan:

json Copy
{
  "taskId": "abc123...",
  "solution": {
    "cookie": "aws-waf-token=AQAAAA..."
  },
  "status": "ready"
}

Mengimpor Alur Kerja Ini

Salin JSON di bawah ini dan impor ke n8n Anda melalui Menu -> Import from JSON.

Klik untuk memperluas JSON alur kerja lengkap
json Copy
{
  "name": "AWS WAF Solver API",
  "nodes": [
    {
      "parameters": {
        "content": "## AWS WAF Solver API\n\n**Untuk:** Tim yang perlu menyelesaikan tantangan AWS WAF di alat lain.\n\n**Fungsi:** Menerima parameter AWS WAF, mengirim tantangan ke CapSolver, dan mengembalikan cookie `aws-waf-token` yang dipecahkan.\n\n**Cara Kerjanya:**\n1. Webhook menerima permintaan POST dengan `websiteURL` dan parameter opsional.\n2. CapSolver memecahkan tantangan AWS WAF.\n3. Jika berhasil, Webhook mengembalikan respons JSON dengan cookie `aws-waf-token`.\n4. Jika gagal, Webhook mengembalikan pesan kesalahan.\n\n**Pengaturan:**\n1. Tambahkan kunci API CapSolver Anda di **Settings → Credentials**.\n2. Aktifkan alur kerja.\n3. Catat URL Webhook.\n\n**Penting:**\n- AWS WAF tidak memerlukan `websiteKey`. Hanya `websiteURL`.\n- Solusinya adalah cookie `aws-waf-token`, yang harus dikirim sebagai header HTTP `Cookie`.",
        "height": 480,
        "width": 460,
        "color": 1
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -728,
        -400
      ],
      "id": "sticky-blog-main-1773678228095-1",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "solver-aws-waf",
        "responseMode": "responseNode",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2.1,
      "position": [
        -400,
        0
      ],
      "id": "aw111111-1111-1111-1111-aw1111111101",
      "name": "Webhook Trigger",
      "webhookId": "aw111111-aaaa-bbbb-cccc-aw1111111101",
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "operation": "AWS WAF",
        "type": "AntiAwsWafTaskProxyLess",
        "websiteURL": "={{ $json.body.websiteURL }}",
        "awsKey": "={{ $json.body.awsKey }}",
        "awsIv": "={{ $json.body.awsIv }}",
        "awsContext": "={{ $json.body.awsContext }}",
        "awsChallengeJS": "={{ $json.body.awsChallengeJS }}",
        "awsApiJs": "={{ $json.body.awsApiJs }}",
        "optional": {}
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [
        -96,
        0
      ],
      "id": "aw111111-1111-1111-1111-aw1111111102",
      "name": "Solve AWS WAF",
      "credentials": {
        "capSolverApi": {
          "id": "YOUR_CREDENTIAL_ID",
          "name": "CapSolver account"
        }
      }
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "aws-if-001",
              "leftValue": "={{ $json.error }}",
              "operator": {
                "type": "string",
                "operation": "isEmpty",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        208,
        0
      ],
      "id": "aw111111-1111-1111-1111-aw1111111103",
      "name": "CapSolver Error?"
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ JSON.stringify($json.data) }}",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.5,
      "position": [
        512,
        -80
      ],
      "id": "aw111111-1111-1111-1111-aw1111111104",
      "name": "Respond to Webhook (Success)"
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ JSON.stringify({ error: $json.error }) }}",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.5,
      "position": [
        512,
        128
      ],
      "id": "aw111111-1111-1111-1111-aw1111111105",
      "name": "Respond to Webhook (Error)"
    }
  ],
  "connections": {
    "Webhook Trigger": {
      "main": [
        [
          {
            "node": "Solve AWS WAF",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Solve AWS WAF": {
      "main": [
        [
          {
            "node": "CapSolver Error?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "CapSolver Error?": {
      "main": [
        [
          {
            "node": "Respond to Webhook (Success)",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Respond to Webhook (Error)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  }
}

Alur Kerja: Contoh Kasus Penggunaan

API pemecah dan contoh pengiriman di atas menunjukkan pola inti untuk menyelesaikan tantangan AWS WAF, mengirimkan cookie, dan memproses hasilnya. Alur kerja di bawah ini memperluas pola ini ke kasus penggunaan siap produksi. Masing-masing mencakup pemicu ganda (jadwal + webhook), pelacakan status persisten, dan output terstruktur.

Alur Kerja Tujuan
Pengikisan AWS WAF — Detail Harga & Produk — CapSolver + Jadwal + Webhook Mengikis harga dan nama produk setiap 6 jam, membandingkan dengan nilai sebelumnya yang disimpan di staticData, dan mengirim peringatan jika ada perubahan
Login Akun AWS WAF — CapSolver + Jadwal + Webhook Masuk ke situs yang dilindungi AWS WAF dengan akun Anda. Pertama pecahkan, lalu POST kredensial dengan cookie

Contoh 1: Pengikisan

Alur kerja ini mengikis halaman produk setiap 6 jam (jadwal) atau sesuai permintaan (webhook), mengekstrak harga menggunakan node HTML, dan membandingkannya dengan nilai yang disimpan sebelumnya.

Jalur Jadwal:

Copy
Setiap 6 Jam -> Pecahkan AWS WAF -> Ambil Halaman Produk -> Ekstrak Data
  -> Bandingkan Data -> Data Berubah? -> Bangun Peringatan / Tidak Ada Perubahan

Perilaku utama:

  • Cookie dikirim sebagai header Cookie (ini adalah cara yang benar untuk mengirim token AWS WAF; bukan sebagai bidang formulir)
  • Node HTML mengekstrak harga dan nama produk melalui pemilih CSS (.product-price, h1)
  • $workflow.staticData.lastPrice mempertahankan harga sebelumnya di antara eksekusi
  • Perbandingan harga mendeteksi penurunan (tingkat keparahan: deal) dan peningkatan (tingkat keparahan: info)
Klik untuk memperluas JSON alur kerja lengkap (17 node)
json Copy
{
  "name": "AWS WAF Scraping — Price & Product Details — CapSolver + Schedule + Webhook",
  "nodes": [
    {
      "parameters": {
        "content": "## Pengikisan AWS WAF — Monitor Harga & Produk\n\n**Untuk:** Tim yang perlu memantau harga atau data produk di situs yang dilindungi AWS WAF.\n\n**Fungsi:** Memecahkan AWS WAF, mengambil halaman produk, mengekstrak harga dan nama melalui pemilih CSS, membandingkan dengan nilai yang disimpan, dan mengirim peringatan jika ada perubahan.\n\n**Cara Kerjanya:**\n1. Jadwal (setiap 6 jam) atau Webhook memicu alur.\n2. CapSolver memecahkan tantangan AWS WAF.\n3. Permintaan HTTP mengambil halaman produk dengan token yang dipecahkan.\n4. Node HTML mengekstrak harga dan nama produk.\n5. Node Kode membandingkan harga saat ini dengan harga yang disimpan → mengirim peringatan jika ada perubahan.\n\n**Pengaturan:**\n1. Tambahkan kunci API CapSolver Anda di **Settings → Credentials**.\n2. Ganti URL placeholder dan kunci situs.\n3. Perbarui pemilih CSS di \"Ekstrak Data\" agar sesuai dengan halaman target Anda.\n4. Hubungkan output \"Bangun Peringatan\" ke saluran notifikasi Anda.",
        "height": 560,
        "width": 460,
        "color": 1
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -920,
        -380
      ],
      "id": "sticky-blog-main-1773678228094-1",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "content": "### Jalur Jadwal\nDijalankan secara otomatis setiap 6 jam.\nHasil disimpan dalam data statis alur kerja untuk perbandingan antar eksekusi.",
        "height": 480,
        "width": 1900,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -440,
        -280
      ],
      "id": "sticky-blog-section-1773678228094-2",
      "name": "Sticky Note1"
    },
    {
      "parameters": {
        "content": "### Jalur Webhook\nPemicu sesuai permintaan — logika yang sama, mengembalikan hasil sebagai respons JSON.",
        "height": 480,
        "width": 1900,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -440,
        140
      ],
      "id": "sticky-blog-section-1773678228094-3",
      "name": "Sticky Note2"
    },
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 6
            }
          ]
        }
      },
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.3,
      "position": [
        -400,
        0
      ],
      "id": "aw333333-3333-3333-3333-aw3333333301",
      "name": "Every 6 Hours"
    },
    {
      "parameters": {
        "operation": "AWS WAF",
        "type": "AntiAwsWafTaskProxyLess",
        "websiteURL": "https://YOUR-TARGET-SITE.com/product-page",
        "optional": {}
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [
        -96,
        0
      ],
      "id": "aw333333-3333-3333-3333-aw3333333302",
      "name": "Solve AWS WAF",
      "credentials": {
        "capSolverApi": {
          "id": "YOUR_CREDENTIAL_ID",
          "name": "CapSolver account"
        }
      }
    },
    {
      "parameters": {
        "url": "https://YOUR-TARGET-SITE.com/product-page",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
            },
            {
              "name": "Cookie",
              "value": "={{ $json.data.solution.cookie }}"
            }
          ]
        },
        "options": {
          "response": {
            "response": {
              "fullResponse": false
            }
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        208,
        0
      ],
      "id": "aw333333-3333-3333-3333-aw3333333303",
      "name": "Fetch Product Page"
    },
    {
      "parameters": {
        "operation": "extractHtmlContent",
        "sourceData": "json",
        "dataPropertyName": "data",
        "extractionValues": {
          "values": [
            {
              "key": "price",
              "cssSelector": ".product-price, [data-price], .price",
              "returnValue": "text",
              "returnArray": false
            },
            {
              "key": "productName",
              "cssSelector": "h1, .product-title",
              "returnValue": "text",
              "returnArray": false
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.html",
      "typeVersion": 1.2,
      "position": [
        512,
        0
      ],
      "id": "aw333333-3333-3333-3333-aw3333333304",
      "name": "Extract Data"
    },
    {
      "parameters": {
        "jsCode": "// Get current and previous price from workflow static data\nconst staticData = $workflow.staticData;\nconst currentPrice = $input.first().json.price;\nconst previousPrice = staticData.lastPrice;\nconst productName = $input.first().json.productName || 'Product';\n\n// Parse numeric values for comparison\nconst parsePrice = (str) => {\n  if (!str) return null;\n  const match = str.match(/[\\d,]+\\.?\\d*/);\n  return match ? parseFloat(match[0].replace(',', '')) : null;\n};\n\nconst currentNum = parsePrice(currentPrice);\nconst previousNum = parsePrice(previousPrice);\n\n// Update stored price\nstaticData.lastPrice = currentPrice;\nstaticData.lastChecked = new Date().toISOString();\n\nconst changed = previousNum !== null && currentNum !== null && currentNum !== previousNum;\nconst direction = changed ? (currentNum < previousNum ? 'dropped' : 'increased') : 'unchanged';\nconst diff = changed ? Math.abs(currentNum - previousNum).toFixed(2) : '0';\n\nreturn [{\n  json: {\n    productName,\n    currentPrice,\n    previousPrice: previousPrice || 'first check',\n    changed,\n    direction,\n    diff: changed ? `$${diff}` : null,\n    checkedAt: new Date().toISOString()\n  }\n}];"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        800,
        0
      ],
      "id": "aw333333-3333-3333-3333-aw3333333305",
      "name": "Compare Data"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "price-if-001",
              "leftValue": "={{ $json.changed }}",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        1104,
        0
      ],
      "id": "aw333333-3333-3333-3333-aw3333333306",
      "name": "Data Changed?"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "alert-001",
              "name": "alert",
              "value": "=Price {{ $json.direction }} for {{ $json.productName }}: {{ $json.previousPrice }} → {{ $json.currentPrice }} ({{ $json.direction === 'dropped' ? '-' : '+' }}{{ $json.diff }})",
              "type": "string"
            },
            {
              "id": "alert-002",
              "name": "severity",
              "value": "={{ $json.direction === 'dropped' ? 'deal' : 'info' }}",
              "type": "string"
            },
            {
              "id": "alert-003",
              "name": "checkedAt",
              "value": "={{ $json.checkedAt }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1408,
        -80
      ],
      "id": "aw333333-3333-3333-3333-aw3333333307",
      "name": "Build Alert"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "nc-001",
              "name": "status",
              "value": "no_change",
              "type": "string"
            },
            {
              "id": "nc-002",
              "name": "currentPrice",
              "value": "={{ $json.currentPrice }}",
              "type": "string"
            },
            {
              "id": "nc-003",
              "name": "checkedAt",
              "value": "={{ $json.checkedAt }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1408,
        128
      ],
      "id": "aw333333-3333-3333-3333-aw3333333308",
      "name": "No Change"
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "price-monitor-aws-waf",
        "responseMode": "responseNode",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2.1,
      "position": [
        -400,
        420
      ],
      "id": "aw333333-3333-3333-3333-aw3333333309",
      "name": "Webhook Trigger",
      "webhookId": "aw333333-aaaa-bbbb-cccc-aw3333333309",
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "operation": "AWS WAF",
        "type": "AntiAwsWafTaskProxyLess",
        "websiteURL": "https://YOUR-TARGET-SITE.com/product-page",
        "optional": {}
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [
        -96,
        420
      ],
      "id": "aw333333-3333-3333-3333-aw3333333310",
      "name": "Solve AWS WAF [Webhook]",
      "credentials": {
        "capSolverApi": {
          "id": "YOUR_CREDENTIAL_ID",
          "name": "CapSolver account"
        }
      }
    },
    {
      "parameters": {
        "url": "https://YOUR-TARGET-SITE.com/product-page",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
            },
            {
              "name": "Cookie",
              "value": "={{ $json.data.solution.cookie }}"
            }
          ]
        },
        "options": {
          "response": {
            "response": {
              "fullResponse": false
            }
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        208,
        420
      ],
      "id": "aw333333-3333-3333-3333-aw3333333311",
      "name": "Fetch Product Page [Webhook]"
    },
    {
      "parameters": {
        "operation": "extractHtmlContent",
        "sourceData": "json",
        "dataPropertyName": "data",
        "extractionValues": {
          "values": [
            {
              "key": "price",
              "cssSelector": ".product-price, [data-price], .price",
              "returnValue": "text",
              "returnArray": false
            },
            {
              "key": "productName",
              "cssSelector": "h1, .product-title",
              "returnValue": "text",
              "returnArray": false
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.html",
      "typeVersion": 1.2,
      "position": [
        512,
        420
      ],
      "id": "aw333333-3333-3333-3333-aw3333333312",
      "name": "Extract Data [Webhook]"
    },
    {
      "parameters": {
        "jsCode": "// Get current and previous price from workflow static data\nconst staticData = $workflow.staticData;\nconst currentPrice = $input.first().json.price;\nconst previousPrice = staticData.lastPrice;\nconst productName = $input.first().json.productName || 'Product';\n\n// Parse numeric values for comparison\nconst parsePrice = (str) => {\n  if (!str) return null;\n  const match = str.match(/[\\d,]+\\.?\\d*/);\n  return match ? parseFloat(match[0].replace(',', '')) : null;\n};\n\nconst currentNum = parsePrice(currentPrice);\nconst previousNum = parsePrice(previousPrice);\n\n// Update stored price\nstaticData.lastPrice = currentPrice;\nstaticData.lastChecked = new Date().toISOString();\n\nconst changed = previousNum !== null && currentNum !== null && currentNum !== previousNum;\nconst direction = changed ? (currentNum < previousNum ? 'dropped' : 'increased') : 'unchanged';\nconst diff = changed ? Math.abs(currentNum - previousNum).toFixed(2) : '0';\n\nreturn [{\n  json: {\n    productName,\n    currentPrice,\n    previousPrice: previousPrice || 'first check',\n    changed,\n    direction,\n    diff: changed ? `$${diff}` : null,\n    checkedAt: new Date().toISOString()\n  }\n}];"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        800,
        420
      ],
      "id": "aw333333-3333-3333-3333-aw3333333313",
      "name": "Compare Data [Webhook]"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "price-if-002",
              "leftValue": "={{ $json.changed }}",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        1104,
        420
      ],
      "id": "aw333333-3333-3333-3333-aw3333333314",
      "name": "Data Changed? [Webhook]"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "alert-004",
              "name": "alert",
              "value": "=Price {{ $json.direction }} for {{ $json.productName }}: {{ $json.previousPrice }} → {{ $json.currentPrice }} ({{ $json.direction === 'dropped' ? '-' : '+' }}{{ $json.diff }})",
              "type": "string"
            },
            {
              "id": "alert-005",
              "name": "severity",
              "value": "={{ $json.direction === 'dropped' ? 'deal' : 'info' }}",
              "type": "string"
            },
            {
              "id": "alert-006",
              "name": "checkedAt",
              "value": "={{ $json.checkedAt }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1408,
        340
      ],
      "id": "aw333333-3333-3333-3333-aw3333333315",
      "name": "Build Alert [Webhook]"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "nc-004",
              "name": "status",
              "value": "no_change",
              "type": "string"
            },
            {
              "id": "nc-005",
              "name": "currentPrice",
              "value": "={{ $json.currentPrice }}",
              "type": "string"
            },
            {
              "id": "nc-006",
              "name": "checkedAt",
              "value": "={{ $json.checkedAt }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1408,
        548
      ],
      "id": "aw333333-3333-3333-3333-aw3333333316",
      "name": "No Change [Webhook]"
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ JSON.stringify($json) }}",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.5,
      "position": [
        1712,
        420
      ],
      "id": "aw333333-3333-3333-3333-aw3333333317",
      "name": "Respond to Webhook [Webhook]"
    }
  ],
  "connections": {
    "Every 6 Hours": {
      "main": [
        [
          {
            "node": "Solve AWS WAF",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Solve AWS WAF": {
      "main": [
        [
          {
            "node": "Fetch Product Page",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Product Page": {
      "main": [
        [
          {
            "node": "Extract Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Data": {
      "main": [
        [
          {
            "node": "Compare Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Compare Data": {
      "main": [
        [
          {
            "node": "Data Changed?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Data Changed?": {
      "main": [
        [
          {
            "node": "Build Alert",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "No Change",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook Trigger": {
      "main": [
        [
          {
            "node": "Solve AWS WAF [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Solve AWS WAF [Webhook]": {
      "main": [
        [
          {
            "node": "Fetch Product Page [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Product Page [Webhook]": {
      "main": [
        [
          {
            "node": "Extract Data [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Data [Webhook]": {
      "main": [
        [
          {
            "node": "Compare Data [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Compare Data [Webhook]": {
      "main": [
        [
          {
            "node": "Data Changed? [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Data Changed? [Webhook]": {
      "main": [
        [
          {
            "node": "Build Alert [Webhook]",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "No Change [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Build Alert [Webhook]": {
      "main": [
        [
          {
            "node": "Respond to Webhook [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "No Change [Webhook]": {
      "main": [
        [
          {
            "node": "Respond to Webhook [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  }
}

Alur Kerja: Otomatisasi Login Akun — Memecahkan AWS WAF dan Mengirim Kredensial

Alur kerja ini mengotomatiskan pengiriman formulir login yang dilindungi AWS WAF dari awal hingga akhir. Ini memecahkan tantangan AWS WAF sebelum mengirimkan kredensial.

Cara Kerjanya

Alur kerja ini terdiri dari lima node:

  1. Webhook — Menerima permintaan POST masuk yang memicu otomatisasi login
  2. Pecahkan AWS WAF — Mengirim tantangan ke CapSolver dan menunggu pemecahan
  3. Kirim Formulir Login — Mengeluarkan permintaan HTTP POST ke situs target dengan kredensial dan cookie AWS WAF yang dipecahkan
  4. Respons ke Webhook — Mengembalikan hasil login

Konfigurasi Node

1. Node Webhook

Pengaturan Nilai
Metode HTTP POST
Jalur login-aws-waf
Respons Response Node

Ini akan membuat titik akhir di https://your-n8n-instance.com/webhook/login-aws-waf.

2. Pecahkan AWS WAF (CapSolver)

Parameter Nilai
Operasi AWS WAF
URL Situs Web https://YOUR-TARGET-SITE.com/login

Pastikan juga untuk memilih kredensial CapSolver Anda.

3. Kirim Formulir Login (Permintaan HTTP)

Pengaturan Nilai
Metode POST
URL https://YOUR-TARGET-SITE.com/login
Tipe Konten form-urlencoded
Parameter Isi username=YOUR_USERNAME, password=YOUR_PASSWORD, Cookie={{ $('Solve AWS WAF').item.json.data.solution.cookie }}

Penting: Ganti YOUR_USERNAME dan YOUR_PASSWORD dengan kredensial Anda yang sebenarnya. Selain itu, Anda mungkin perlu menyesuaikan nama bidang formulir agar sesuai dengan HTML situs target Anda.

4. Respons ke Webhook (Berhasil/Gagal)

Pengaturan Nilai
Format Respons JSON
Isi Respons ={{ JSON.stringify($json) }}

Pengujian

Kirim permintaan POST ke titik akhir Webhook Anda:

bash Copy
curl -X POST https://your-n8n-instance.com/webhook/login-aws-waf \
  -H "Content-Type: application/json" \
  -d '{
    "websiteURL": "https://example.com/login",
    "username": "testuser",
    "password": "testpass"
  }'

Respons yang Diharapkan (Berhasil):

json Copy
{
  "status": "success",
  "message": "Login successful",
  "solution": {
    "cookie": "aws-waf-token=AQAAAA..."
  }
}

Respons yang Diharapkan (Gagal):

json Copy
{
  "status": "failed",
  "message": "Login failed: Invalid credentials or captcha",
  "error": "..."
}

Mengimpor Alur Kerja Ini

Salin JSON di bawah ini dan impor ke n8n Anda melalui Menu -> Import from JSON.

Klik untuk memperluas JSON alur kerja lengkap
json Copy
{
  "name": "AWS WAF Account Login — CapSolver + Schedule + Webhook",
  "nodes": [
    {
      "parameters": {
        "content": "## Otomatisasi Login Akun AWS WAF — CapSolver + Jadwal + Webhook\n\n**Untuk:** Tim yang perlu mengotomatiskan login ke akun yang dilindungi AWS WAF.\n\n**Fungsi:** Memecahkan tantangan AWS WAF dan mengirimkan formulir login dengan cookie yang dipecahkan dan kredensial pengguna.\n\n**Cara Kerjanya:**\n1. Webhook memicu alur.\n2. CapSolver memecahkan tantangan AWS WAF.\n3. Permintaan HTTP mengirimkan formulir login dengan cookie yang dipecahkan dan kredensial pengguna.\n4. Webhook mengembalikan hasil login.\n\n**Pengaturan:**\n1. Tambahkan kunci API CapSolver Anda di **Settings → Credentials**.\n2. Ganti URL placeholder dan kredensial.\n3. Sesuaikan nama bidang formulir agar sesuai dengan situs target Anda.\n4. Aktifkan alur kerja.",
        "height": 480,
        "width": 460,
        "color": 1
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -728,
        -400
      ],
      "id": "sticky-blog-main-1773678228096-1",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "login-aws-waf",
        "responseMode": "responseNode",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2.1,
      "position": [
        -400,
        0
      ],
      "id": "aw444444-4444-4444-4444-aw4444444401",
      "name": "Webhook Trigger",
      "webhookId": "aw444444-aaaa-bbbb-cccc-aw4444444401",
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "operation": "AWS WAF",
        "type": "AntiAwsWafTaskProxyLess",
        "websiteURL": "={{ $json.body.websiteURL }}",
        "optional": {}
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [
        -96,
        0
      ],
      "id": "aw444444-4444-4444-4444-aw4444444402",
      "name": "Solve AWS WAF",
      "credentials": {
        "capSolverApi": {
          "id": "YOUR_CREDENTIAL_ID",
          "name": "CapSolver account"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "={{ $json.body.websiteURL }}",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
            },
            {
              "name": "Content-Type",
              "value": "application/x-www-form-urlencoded"
            },
            {
              "name": "Cookie",
              "value": "={{ $('Solve AWS WAF').item.json.data.solution.cookie }}"
            }
          ]
        },
        "sendBody": true,
        "contentType": "form-urlencoded",
        "bodyParameters": {
          "parameters": [
            {
              "name": "username",
              "value": "={{ $json.body.username }}"
            },
            {
              "name": "password",
              "value": "={{ $json.body.password }}"
            }
          ]
        },
        "options": {
          "response": {
            "response": {
              "fullResponse": false
            }
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        208,
        0
      ],
      "id": "aw444444-4444-4444-4444-aw4444444403",
      "name": "Submit Login Form"
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ JSON.stringify($json) }}",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.5,
      "position": [
        512,
        0
      ],
      "id": "aw444444-4444-4444-4444-aw4444444404",
      "name": "Respond to Webhook"
    }
  ],
  "connections": {
    "Webhook Trigger": {
      "main": [
        [
          {
            "node": "Solve AWS WAF",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Solve AWS WAF": {
      "main": [
        [
          {
            "node": "Submit Login Form",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Submit Login Form": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  }
}

Pemecahan Masalah

"Akses AWS WAF tidak ditemukan"

Kesalahan ini menunjukkan bahwa akun atau paket CapSolver Anda tidak menyertakan akses AWS WAF. Periksa Dasbor CapSolver Anda untuk mengonfirmasi bahwa layanan ini termasuk dalam paket Anda.

"URL Situs Web tidak valid"

Kesalahan ini menunjukkan bahwa parameter websiteURL yang Anda berikan di node CapSolver tidak benar. Periksa kembali tab jaringan alat pengembang situs target Anda untuk memastikan Anda menggunakan nilai yang benar.

"Login gagal meskipun AWS WAF dipecahkan"

Jika login gagal meskipun AWS WAF berhasil dipecahkan, masalahnya mungkin terletak pada hal berikut:

  • Kredensial salah: Periksa kembali nama pengguna dan kata sandi yang Anda kirimkan di formulir login.
  • Ketidakcocokan sesi: Jika proses login melibatkan sesi atau cookie, pastikan Anda mempertahankan sesi yang sama antara pengambilan tantangan AWS WAF dan pengiriman formulir login.
  • Bidang formulir lainnya: Situs target mungkin memerlukan bidang tersembunyi tambahan, token CSRF, atau parameter lain agar login berhasil. Periksa HTML formulir untuk mengidentifikasi bidang lain yang diperlukan.
  • Agen Pengguna: Beberapa situs mungkin menolak permintaan berdasarkan string agen pengguna. Coba atur agen pengguna browser umum di permintaan HTTP Anda.

"Kredensial CapSolver tidak valid"

Kesalahan ini menunjukkan bahwa kunci API CapSolver yang Anda konfigurasikan di n8n salah atau kedaluwarsa. Periksa Dasbor CapSolver Anda dan perbarui kredensial di n8n.


Praktik Terbaik

  1. Pertahankan Sesi: Jika situs target menggunakan sesi atau cookie, pastikan Anda mempertahankan sesi yang sama antara pengambilan tantangan dan pengiriman formulir. Di n8n, Anda dapat menangani cookie menggunakan node Permintaan HTTP.
  2. Validasi Parameter: Periksa kembali bahwa websiteURL dan parameter opsional apa pun seperti awsKey, awsIv, awsContext, awsChallengeJS, dan awsApiJs sudah benar. Ini adalah kunci untuk pemecahan AWS WAF yang berhasil.
  3. Tangani Kesalahan: Sertakan logika penanganan kesalahan dalam alur kerja Anda untuk menangani kegagalan pemecahan atau login dengan baik. Ini mungkin termasuk mekanisme coba lagi atau notifikasi.
  4. Gunakan Agen Pengguna yang Tepat: Atur string agen pengguna browser umum di semua permintaan HTTP Anda untuk menghindari diblokir oleh situs.
  5. Uji dan Iterasi: Implementasi AWS WAF dapat bervariasi antar situs. Mulailah dari yang kecil, uji alur kerja Anda, dan ulangi sesuai kebutuhan untuk memastikan alur kerja berfungsi dengan andal pada target spesifik Anda.
  6. Tidak Perlu Proxy: Tidak seperti jenis CAPTCHA lainnya, pemecahan AWS WAF biasanya tidak memerlukan Anda untuk menyediakan proxy. CapSolver menangani persyaratan proxy secara internal.

Siap untuk memulai? Daftar untuk CapSolver dan gunakan kode bonus n8n untuk mendapatkan bonus tambahan 8% pada pengisian ulang pertama Anda!

Spanduk kode bonus CapSolver

FAQ

Apa itu AWS WAF?

AWS WAF adalah firewall aplikasi web kelas perusahaan Amazon yang melindungi situs web dari lalu lintas bot dan penyalahgunaan melalui tantangan tak terlihat dan verifikasi berbasis token.

Bagaimana AWS WAF berbeda dari reCAPTCHA atau Turnstile?

AWS WAF tidak memerlukan kunci situs, menggunakan autentikasi berbasis cookie, mengembalikan cookie aws-waf-token, dan biasanya merupakan tantangan tak terlihat tanpa widget yang terlihat untuk interaksi pengguna.

Berapa biaya untuk memecahkan tantangan AWS WAF?

Harga bervariasi berdasarkan penggunaan. Periksa halaman harga CapSolver untuk harga AWS WAF saat ini. Tugas pemecahan AWS WAF lebih mahal daripada pengenalan gambar-ke-teks sederhana, tetapi lebih murah daripada jenis CAPTCHA kompleks lainnya.

Berapa lama waktu yang dibutuhkan untuk memecahkan tantangan AWS WAF?

Tugas pemecahan AWS WAF biasanya memakan waktu 10-30 detik, tergantung pada kompleksitas tantangan dan beban server CapSolver. Tidak seperti ImageToTextTask, pemecahan AWS WAF melibatkan pembuatan tugas dan polling, jadi tidak instan.

Apakah saya memerlukan proxy untuk AWS WAF?

Layanan pemecahan AWS WAF CapSolver biasanya tidak memerlukan Anda untuk menyediakan proxy. CapSolver menangani persyaratan proxy secara internal. Anda hanya perlu memberikan websiteURL dan parameter opsional apa pun.

Mengapa aws-waf-token saya tidak diterima?

Jika aws-waf-token Anda tidak diterima, periksa hal berikut:

  • Ketidakcocokan sesi: Pastikan Anda mempertahankan sesi dan cookie yang sama antara pengambilan tantangan AWS WAF dan pengiriman formulir.
  • Bidang formulir lainnya: Periksa HTML formulir untuk melihat apakah ada bidang tersembunyi tambahan atau token CSRF yang perlu Anda kirimkan.
  • Agen Pengguna: Coba atur agen pengguna browser umum di permintaan HTTP Anda.
  • Parameter Opsional: Jika situs menggunakan parameter opsional seperti awsKey, awsIv, dll., pastikan Anda menyediakannya dengan benar.

Mengapa login gagal meskipun AWS WAF berhasil dipecahkan?

Jika login gagal meskipun AWS WAF berhasil dipecahkan, periksa hal berikut:

  • Kredensial: Pastikan Anda mengirimkan nama pengguna dan kata sandi yang benar.
  • Sesi/Cookie: Pastikan Anda mempertahankan sesi dan cookie yang sama antara pengambilan tantangan dan pengiriman formulir login.
  • Bidang formulir lainnya: Periksa HTML formulir untuk melihat apakah ada bidang tersembunyi tambahan atau token CSRF yang perlu Anda kirimkan.
  • Agen Pengguna: Coba atur agen pengguna browser umum di permintaan HTTP Anda.

Bisakah alur kerja ini digunakan dengan n8n Cloud?

Ya. Alur kerja ini berfungsi dengan n8n yang di-host sendiri dan n8n Cloud. Node CapSolver sudah tersedia sebagai integrasi resmi. Anda hanya perlu menambahkan kredensial API Anda.

Lihat Lebih Banyak

Web ScrapingApr 22, 2026

Arsitektur Pengambilan Data Web Rust untuk Ekstraksi Data yang Dapat Diskalakan

Pelajari arsitektur pengambilan data web Rust yang dapat diskalakan dengan reqwest, scraper, pengambilan data asinkron, pengambilan data browser tanpa tampilan, rotasi proxy, dan penanganan CAPTCHA yang sesuai aturan.

Emma Foster
Emma Foster
Web ScrapingFeb 17, 2026

Cara menyelesaikan Captcha di Nanobot dengan CapSolver

Mengotomasi penyelesaian CAPTCHA dengan Nanobot dan CapSolver. Gunakan Playwright untuk menyelesaikan reCAPTCHA dan Cloudflare secara otomatis.

Daftar Isi

Anh Tuan
Anh Tuan
Web ScrapingFeb 10, 2026

Data sebagai Layanan (DaaS): Apa Itu dan Mengapa Penting pada 2026

Pahami Data sebagai Layanan (DaaS) pada 2026. Eksplor manfaatnya, kasus penggunaan, dan bagaimana DaaS mengubah bisnis dengan wawasan real-time dan skalabilitas.

Anh Tuan
Anh Tuan
Web ScrapingFeb 03, 2026

Cara Menyelesaikan Captcha di RoxyBrowser dengan Integrasi CapSolver

Mengintegrasikan CapSolver dengan RoxyBrowser untuk mengotomatisasi tugas browser dan menghindari reCAPTCHA, Turnstile, dan CAPTCHA lainnya.

Ethan Collins
Ethan Collins
Blog
Web Scraping