You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中按时注入JS获取Cloudflare Turnstile参数对接2captcha API

解决方案:在Python环境中提前注入脚本拦截Cloudflare Turnstile参数

方法一:Selenium + Chrome DevTools Protocol(CDP)

核心思路是利用Chrome DevTools的Page.addScriptToEvaluateOnNewDocument接口,在页面所有资源加载前注入拦截脚本,确保脚本在Turnstile组件初始化前生效。

代码示例

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

# 配置Chrome选项
chrome_options = Options()
chrome_options.add_argument("--disable-blink-features=AutomationControlled")
chrome_options.add_argument("--start-maximized")

# 初始化浏览器
driver = webdriver.Chrome(options=chrome_options)

# 通过CDP注入预加载脚本
driver.execute_cdp_cmd(
    "Page.addScriptToEvaluateOnNewDocument",
    {
        "source": """
            window.interceptedTurnstileParams = null;
            const interval = setInterval(() => {
                if (window.turnstile) {
                    clearInterval(interval);
                    // 覆盖render方法,拦截参数
                    const originalRender = window.turnstile.render;
                    window.turnstile.render = (container, params) => {
                        window.interceptedTurnstileParams = params;
                        // 调用原始render方法,保证验证码正常加载
                        return originalRender(container, params);
                    };
                }
            }, 50);
        """
    }
)

# 访问目标页面
driver.get("https://your-target-url.com")

# 等待验证码加载完成后,获取拦截到的参数
params = driver.execute_script("return window.interceptedTurnstileParams;")
if params:
    cdata = params.get('cdata')
    pagedata = params.get('pagedata')
    print(f"cdata: {cdata}")
    print(f"pagedata: {pagedata}")

# 后续可将参数传给2captcha API
driver.quit()

关键说明

  • Page.addScriptToEvaluateOnNewDocument会在document创建后、任何页面脚本执行前注入代码,完美解决时机问题。
  • 保留原始turnstile.render调用,确保验证码能正常加载;若不需要加载验证码,可替换为官方示例的return 'foo'。

方法二:Playwright(更简洁高效)

Playwright内置add_init_script方法,专门用于注入页面初始化前的脚本,无需手动操作CDP,代码更简洁。

代码示例

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    page = browser.new_page()

    # 注入预加载脚本
    page.add_init_script("""
        window.interceptedTurnstileParams = null;
        const interval = setInterval(() => {
            if (window.turnstile) {
                clearInterval(interval);
                const originalRender = window.turnstile.render;
                window.turnstile.render = (container, params) => {
                    window.interceptedTurnstileParams = params;
                    return originalRender(container, params);
                };
            }
        }, 50);
    """)

    # 访问目标页面
    page.goto("https://your-target-url.com")

    # 获取参数
    params = page.evaluate("return window.interceptedTurnstileParams;")
    if params:
        cdata = params.get('cdata')
        pagedata = params.get('pagedata')
        print(f"cdata: {cdata}")
        print(f"pagedata: {pagedata}")

    browser.close()

关键说明

  • add_init_script自动处理脚本注入时机,无需担心执行顺序问题。
  • 支持Chromium、Firefox、WebKit等多种浏览器,兼容性更强。

内容的提问来源于stack exchange,提问作者parsa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 07:26:21