CAPSOLVER
博客
如何在Crawl4AI中通过CapSolver集成解决AWS WAF问题

如何在Crawl4AI中通过CapSolver集成解决AWS WAF问题

Logo of CapSolver

Lucas Mitchell

Automation Engineer

21-Oct-2025

简介

亚马逊网络服务(AWS)网络应用防火墙(WAF)是一种强大的安全服务,可帮助保护网络应用程序免受可能影响可用性、危害安全性或消耗过多资源的常见网络攻击。虽然对于保护网络资产至关重要,但 AWS WAF 可能会对自动化网络爬虫和数据提取过程构成重大挑战,通常会阻止合法爬虫。

本文提供了一个全面的指南,介绍如何无缝集成 Crawl4AI(一个先进的网络爬虫)与 CapSolver,一个领先的 CAPTCHA 和反机器人解决方案服务,以有效解决 AWS WAF 保护。我们将详细说明基于 API 和扩展集成的方法,包括代码示例和解释,以确保您的网络自动化任务能够顺利进行。

了解 AWS WAF 及其对网络爬虫的挑战

AWS WAF 通过监控转发到 Amazon CloudFront 分发、应用负载均衡器、Amazon API Gateway 或 AWS AppSync GraphQL API 的 HTTP(S) 请求来运行。它允许您配置规则来阻止常见的攻击模式,例如 SQL 注入或跨站脚本攻击,并可以根据 IP 地址、HTTP 标头、HTTP 正文或 URI 字符串过滤流量。对于网络爬虫来说,这通常意味着:

  • 请求过滤: WAF 规则可以识别并阻止看似自动或恶意的请求。
  • 基于 Cookie 的验证: AWS WAF 频繁使用特定的 Cookie 来跟踪和验证合法用户会话。没有这些 Cookie,请求通常会被拒绝。
  • 动态挑战: 虽然不是传统的 CAPTCHA,但底层机制可以作为障碍,需要特定的令牌或会话标识符才能继续。

CapSolver 提供了强大的解决方案来获取必要的 aws-waf-token Cookie,这是绕过 AWS WAF 的关键。当与 Crawl4AI 集成时,这允许您的爬虫模拟合法用户行为并成功导航到受保护的网站。

💡 Crawl4AI 集成用户的独家优惠:
为了庆祝此次集成,我们为所有通过本教程注册的 CapSolver 用户提供一个独家 6% 优惠码 — CRAWL4
只需在 仪表板 中充值时输入该代码,即可 立即获得额外 6% 的信用额度

集成方法 1:通过 CapSolver API 与 Crawl4AI 集成

通过 API 集成处理 Crawl4AI 和 CapSolver 的 AWS WAF 挑战是最有效的方法。此方法涉及使用 CapSolver 获取所需的 aws-waf-token,然后在重新加载目标页面之前将此令牌作为 Cookie 注入到 Crawl4AI 的浏览器上下文中。

工作原理:

  1. 初始导航: Crawl4AI 尝试访问受 AWS WAF 保护的目标网页。
  2. 识别 WAF 挑战: 遇到 WAF 时,您的脚本将识别需要 aws-waf-token
  3. 获取 AWS WAF Cookie: 使用 CapSolver 的 SDK 调用 CapSolver 的 API,指定 AntiAwsWafTaskProxyLess 类型和 websiteURL。CapSolver 将返回所需的 aws-waf-token Cookie。
  4. 注入 Cookie 并重新加载: 使用 Crawl4AI 的 js_code 功能将获得的 aws-waf-token 设置为浏览器上下文中的 Cookie。设置 Cookie 后,页面将重新加载。
  5. 继续操作: 在正确 aws-waf-token Cookie 的情况下,Crawl4AI 现在可以成功访问受保护的页面并继续其数据提取任务。

示例代码:AWS WAF 的 API 集成

以下 Python 代码演示了如何将 CapSolver 的 API 与 Crawl4AI 集成以解决 AWS WAF 挑战。此示例针对受 AWS WAF 保护的保时捷 NFT 入门页面。

python 复制代码
import asyncio
import capsolver
from crawl4ai import *


# TODO: 设置您的配置
api_key = "CAP-xxxxxxxxxxxxxxxxxxxxx"              # 您的 CapSolver API 密钥
site_url = "https://nft.porsche.com/onboarding@6"  # 您目标网站的页面 URL
cookie_domain = ".nft.porsche.com"                 # 您希望应用 Cookie 的域名
captcha_type = "AntiAwsWafTaskProxyLess"           # 您的目标验证码类型
capsolver.api_key = api_key


async def main():
    browser_config = BrowserConfig(
        verbose=True,
        headless=False,
        use_persistent_context=True,
    )

    async with AsyncWebCrawler(config=browser_config) as crawler:
        await crawler.arun(
            url=site_url,
            cache_mode=CacheMode.BYPASS,
            session_id="session_captcha_test"
        )

        # 使用 CapSolver SDK 获取 AWS WAF Cookie
        solution = capsolver.solve({
            "type": captcha_type,
            "websiteURL": site_url,
        })
        cookie = solution["cookie"]
        print("aws waf cookie:", cookie)

        js_code = """
            document.cookie = \'aws-waf-token=""" + cookie + """;domain=""" + cookie_domain + """;path=/\
\';
            location.reload();
        """

        wait_condition = """() => {
            return document.title === \'Join Porsche’s journey into Web3\';
        }"""

        run_config = CrawlerRunConfig(
            cache_mode=CacheMode.BYPASS,
            session_id="session_captcha_test",
            js_code=js_code,
            js_only=True,
            wait_for=f"js:{wait_condition}"
        )

        result_next = await crawler.arun(
            url=site_url,
            config=run_config,
        )
        print(result_next.markdown)


if __name__ == "__main__":
    asyncio.run(main())

代码分析:

  1. CapSolver SDK 调用: 使用 capsolver.solve 方法调用,指定 AntiAwsWafTaskProxyLess 类型和 websiteURL 以获取 aws-waf-token Cookie。这是 CapSolver 的 AI 解决 WAF 挑战并提供必要 Cookie 的关键步骤。
  2. JavaScript 注入(js_code): js_code 字符串包含 JavaScript,使用 document.cookie 在浏览器上下文中设置 aws-waf-token Cookie。然后触发 location.reload() 重新加载页面,确保后续请求包含新设置的有效 Cookie。
  3. wait_for 条件: 定义了 wait_condition 以确保 Crawl4AI 等待页面标题与 'Join Porsche’s journey into Web3' 匹配,表明 WAF 已成功绕过,目标内容已加载。

集成方法 2:CapSolver 浏览器扩展集成

CapSolver 的浏览器扩展为处理 AWS WAF 挑战提供了一种简化的途径,尤其是在利用 Crawl4AI 管理的持久浏览器上下文中其自动解决功能时。

工作原理:

  1. 持久浏览器上下文: 配置 Crawl4AI 使用 user_data_dir 启动一个浏览器实例,保留已安装的 CapSolver 扩展及其配置。
  2. 安装和配置扩展: 手动将 CapSolver 扩展安装到此浏览器配置文件中并配置您的 CapSolver API 密钥。可以将扩展设置为自动解决 AWS WAF 挑战。
  3. 导航到目标页面: Crawl4AI 导航到受 AWS WAF 保护的网页。
  4. 自动解决: 在浏览器上下文中运行的 CapSolver 扩展会检测到 AWS WAF 挑战并自动获取 aws-waf-token Cookie。然后自动将此 Cookie 应用于后续请求。
  5. 继续操作: 一旦扩展解决了 AWS WAF,Crawl4AI 可以继续其抓取任务,因为浏览器上下文现在将拥有后续请求所需的合法 Cookie。

示例代码:AWS WAF 的扩展集成(自动解决)

此示例演示了如何配置 Crawl4AI 使用带有 CapSolver 扩展的浏览器配置文件以自动解决 AWS WAF。

python 复制代码
import asyncio
import time

from crawl4ai import *


# TODO: 设置您的配置
user_data_dir = "/browser-profile/Default1" # 请确保此路径正确并包含您的配置扩展

browser_config = BrowserConfig(
    verbose=True,
    headless=False,
    user_data_dir=user_data_dir,
    use_persistent_context=True,
    proxy="http://127.0.0.1:13120", # 可选:如需配置代理
)

async def main():
    async with AsyncWebCrawler(config=browser_config) as crawler:
        result_initial = await crawler.arun(
            url="https://nft.porsche.com/onboarding@6",
            cache_mode=CacheMode.BYPASS,
            session_id="session_captcha_test"
        )

        # 扩展将在页面加载时自动解决 AWS WAF。
        # 您可能需要添加等待条件或 time.sleep 以在继续进一步操作前让 WAF 解决。
        time.sleep(30) # 示例等待,根据扩展操作调整

        # 在 AWS WAF 解决后继续其他 Crawl4AI 操作
        # 例如,检查在成功验证后出现的元素或内容
        # print(result_initial.markdown) # 您可以在等待后检查页面内容


if __name__ == "__main__":
    asyncio.run(main())

代码分析:

  1. user_data_dir 此参数对于 Crawl4AI 启动保留已安装 CapSolver 扩展及其配置的浏览器实例至关重要。请确保路径指向包含扩展的正确浏览器配置文件目录。
  2. 自动解决: CapSolver 扩展设计为自动检测和解决 AWS WAF 挑战。包含 time.sleep 作为一般占位符,以允许扩展完成其后台操作。对于更稳健的解决方案,考虑使用 Crawl4AI 的 wait_for 功能来检查表明成功解决 AWS WAF 的特定页面变化。

示例代码:AWS WAF 的扩展集成(手动解决)

如果您希望在抓取逻辑的特定点手动触发 AWS WAF 解决,可以将扩展的 manualSolving 参数设置为 true,然后使用 js_code 点击扩展提供的解决按钮。

python 复制代码
import asyncio
import time

from crawl4ai import *


# TODO: 设置您的配置
user_data_dir = "/browser-profile/Default1" # 请确保此路径正确并包含您的配置扩展

browser_config = BrowserConfig(
    verbose=True,
    headless=False,
    user_data_dir=user_data_dir,
    use_persistent_context=True,
    proxy="http://127.0.0.1:13120", # 可选:如需配置代理
)

async def main():
    async with AsyncWebCrawler(config=browser_config) as crawler:
        result_initial = await crawler.arun(
            url="https://nft.porsche.com/onboarding@6",
            cache_mode=CacheMode.BYPASS,
            session_id="session_captcha_test"
        )

        # 等待片刻以让页面加载并让扩展准备好
        time.sleep(6)

        # 使用 js_code 触发 CapSolver 扩展提供的手动解决按钮
        js_code = """
            let solverButton = document.querySelector(\'#capsolver-solver-tip-button\');
            if (solverButton) {
            // 点击事件
                const clickEvent = new MouseEvent(\'click\', {
                    bubbles: true,
                    cancelable: true,
                    view: window
                });
                
                solverButton.dispatchEvent(clickEvent);
            }
        """
        print(js_code)
        run_config = CrawlerRunConfig(
            cache_mode=CacheMode.BYPASS,
            session_id="session_captcha_test",
            js_code=js_code,
            js_only=True,
        )
        result_next = await crawler.arun(
            url="https://nft.porsche.com/onboarding@6",
            config=run_config
        )
        print("JS 执行结果:", result_next.js_execution_result)

        # 在手动触发后允许时间让 AWS WAF 解决
        time.sleep(30) # 示例等待,根据需要调整

        # 继续其他 Crawl4AI 操作


if __name__ == "__main__":
    asyncio.run(main())

代码分析:

  1. manualSolving 在运行此代码之前,请确保 CapSolver 扩展的 config.jsmanualSolving 设置为 true
  2. 触发解决: js_code 模拟对 #capsolver-solver-tip-button 的点击事件,这是 CapSolver 扩展提供的手动解决按钮。这使您能够精确控制 AWS WAF 解决过程的启动时间。

结论

将 Crawl4AI 与 CapSolver 集成提供了一种强大且高效的解决方案,以绕过 AWS WAF 保护,实现不间断的网络爬虫和数据提取。通过利用 CapSolver 获取关键的 aws-waf-token 以及 Crawl4AI 的灵活 js_code 注入功能,开发人员可以确保其自动化流程无缝通过 WAF 保护的网站。

这种集成不仅提高了爬虫的稳定性和成功率,还显著降低了管理复杂反机器人机制的操作开销。有了这一强大组合,您可以自信地从甚至最安全保护的网络应用程序中收集数据。

常见问题解答(FAQ)

Q1:什么是 AWS WAF,为什么在网页抓取中会遇到它?
A1: AWS WAF(Web 应用程序防火墙)是一种基于云的安全服务,用于保护网络应用程序免受常见网络攻击。在网页抓取中,它作为反机器人机制出现,会阻止被认为是可疑或自动化的请求,需要绕过技术来访问目标数据。

Q2:CapSolver 如何帮助绕过 AWS WAF?
A2: CapSolver 提供了专门的服务,如 AntiAwsWafTaskProxyLess,以解决 AWS WAF 挑战。它获取必要的 aws-waf-token Cookie,然后由 Crawl4AI 使用以模拟合法用户行为并访问受保护的网站。
Q3:Crawl4AI 和 CapSolver 与 AWS WAF 的主要集成方式有哪些?
A3: 主要有两种方式:API 集成,即通过调用 CapSolver 的 API 获取 aws-waf-token,然后通过 Crawl4AI 的 js_code 注入;浏览器扩展集成,即 CapSolver 扩展在持久化浏览器上下文中自动处理 WAF 挑战。

Q4:使用 CapSolver 解决 AWS WAF 时是否需要代理?
A4: 虽然并非始终严格必需,但在需要保持匿名性或模拟特定地理位置请求时,使用代理会很有帮助。CapSolver 的任务通常支持代理配置。

Q5:将 Crawl4AI 与 CapSolver 集成用于 AWS WAF 的优势是什么?
A5: 集成可以实现自动化处理 WAF,提高爬取效率,增强爬虫对反机器人机制的鲁棒性,并通过减少人工干预降低运营成本。

参考资料

合规声明: 本博客提供的信息仅供参考。CapSolver 致力于遵守所有适用的法律和法规。严禁以非法、欺诈或滥用活动使用 CapSolver 网络,任何此类行为将受到调查。我们的验证码解决方案在确保 100% 合规的同时,帮助解决公共数据爬取过程中的验证码难题。我们鼓励负责任地使用我们的服务。如需更多信息,请访问我们的服务条款和隐私政策。

更多