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

求助:使用Python Selenium+2Captcha API无法破解VFS网站Cloudflare Turnstile验证码

问题分析与解决方法

可行性判断

VFS全球签证网站的Cloudflare Turnstile防护级别确实较高,但结合2Captcha+优化后的Selenium方案是可行的,核心问题在于你的代码存在几处关键缺陷,未满足Cloudflare的验证逻辑。

核心问题与修复方案


1. 代码结构与执行顺序错误

你的getCode函数定义在调用之后,会直接触发NameError;同时硬编码的time.sleep无法保证页面元素加载完成,需改用显式等待。

2. Turnstile验证参数缺失

Cloudflare Turnstile除了cf-turnstile-response,还会校验动态生成的孪生字段(如cf-turnstile-response-xxxxxx),以及action参数,仅赋值单个字段无法通过验证。

3. Selenium被Cloudflare识别为自动化工具

普通ChromeDriver的特征会被Cloudflare检测到,需使用反检测驱动并配置浏览器参数。


修正后的完整代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from twocaptcha import TwoCaptcha
import time

# 初始化2Captcha solver
solver = TwoCaptcha('你的API密钥')

def get_turnstile_token(url, site_key, action):
    try:
        result = solver.turnstile(
            sitekey=site_key,
            url=url,
            action=action,
            userAgent=driver.execute_script("return navigator.userAgent;")  # 保持UA一致
        )
        return result['code']
    except Exception as e:
        print(f"验证码求解失败: {e}")
        return None

# 初始化反检测ChromeDriver
options = webdriver.ChromeOptions()
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_argument("--start-maximized")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)

driver = webdriver.Chrome(options=options)
driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")

# 打开目标页面
driver.get("https://visa.vfsglobal.com/ind/en/pol/login")

# 显式等待输入框加载
wait = WebDriverWait(driver, 20)
email_input = wait.until(EC.presence_of_element_located((By.ID, 'mat-input-0')))
password_input = wait.until(EC.presence_of_element_located((By.ID, 'mat-input-1')))

# 输入账号密码
email_input.send_keys('Appointment.004slots@gmail.com')
time.sleep(1)
password_input.send_keys('Umar@1234')

# 获取Turnstile的sitekey和action参数
site_key = "0x4AAAAAAACYaM3U_Dz-4DN1"
action = driver.execute_script("return document.querySelector('.cf-turnstile').getAttribute('data-action')")

# 求解验证码
token = get_turnstile_token(driver.current_url, site_key, action)
if not token:
    driver.quit()
    exit()

# 注入所有Turnstile响应字段
driver.execute_script(f"""
    const responseFields = document.querySelectorAll('[name^="cf-turnstile-response"]');
    responseFields.forEach(field => field.value = '{token}');
""")

# 等待并点击登录按钮
login_btn = wait.until(EC.element_to_be_clickable((By.XPATH, "//button/span[contains(text(),' Sign In')]")))
login_btn.click()

# 后续操作...

额外注意事项

  • 可使用undetected-chromedriver替代普通ChromeDriver,进一步降低被检测概率(安装命令:pip install undetected-chromedriver)。
  • 避免频繁请求,VFS网站可能有IP限流,建议添加合理的间隔时间。
  • 确保2Captcha账户有足够余额,且API密钥正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 19:24:54