Skip to main content

captcha Scenario 5 — WAF Block with Proxy Rotation Retry

Written by RTILA X Engineering Team

Advanced ~10 min
Prerequisites: captcha/3 captcha/4

What You'll Learn

Combine captcha solving with stealth settings

Real-World Use Case

Achieving high success rates on protected sites

LIVE DEMO

WAF Block Retry

Detect the WAF block, retry with a different proxy, and reach the protected table.

Access Blocked by WAF

Your request has been blocked.

Reference: WAF-2025-001
EXPECTED OUTPUT

WAF Data

field value
Invoice INV-2025-001
Amount $450.00
Client Acme Corp
Due Date 2025-03-25
Status Paid
RTILA X PROJECT JSON

RTILA X Automation Project

waf-proxy-rotation-retry.json
{
  "name": "WAF_Proxy_Rotation_Retry",
  "settings": {
    "urls": [
      "https://learn.rtila.com/scenarios/captcha/5"
    ],
    "proxyEnabled": true,
    "proxyList": "http://proxy1:8080\nhttp://proxy2:8080"
  },
  "datasets": {
    "waf_data": {
      "item_selector": "css=table.waf-content-table tr",
      "properties": [
        {
          "name": "field",
          "type": "text",
          "selector": "css=td:nth-child(1)"
        },
        {
          "name": "value",
          "type": "text",
          "selector": "css=td:nth-child(2)"
        }
      ]
    }
  },
  "commands": [
    {
      "command": "execute_script",
      "params": {
        "script": "return document.body.innerText.includes('Access Blocked by WAF') ? 'true' : 'false';",
        "output_variable": "access_blocked"
      }
    },
    {
      "command": "if",
      "params": {
        "condition": {
          "type": "variable_contains",
          "variable": "access_blocked",
          "value": "true"
        },
        "then": [
          {
            "command": "comment",
            "params": {
              "text": "WAF detected — rotate proxy via retry button"
            }
          },
          {
            "command": "click",
            "params": {
              "selector": "css=#retry-btn"
            }
          }
        ],
        "else": []
      }
    },
    {
      "command": "wait_for_selector",
      "params": {
        "selector": "css=.waf-content"
      }
    },
    {
      "command": "extract_data",
      "params": {
        "dataset": "waf_data"
      }
    }
  ]
}

A script condition detects WAF block text and triggers a proxy rotation retry. The second goto request uses the next proxy from the configured list and reaches the real content.

Did you complete this scenario?

Ready to run this automation?

Copy the project JSON above, open RTILA X, create a new project, and paste it.

This scenario covers 2 RTILA X commands and is referenced in 2 learning articles.

Continue Learning

Was this helpful?