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

Android端获取FunCaptcha token的实现方案咨询

如何修改WebView代码以获取FunCaptcha的Token?

我希望通过WebView加载FunCaptcha,并在用户完成验证码验证后获取对应的token,FunCaptcha地址为:https://fbsbx.com/captcha/recaptcha/iframe/。以下代码原本用于获取Google Captcha token,请问如何修改以适配FunCaptcha?

原代码(Google reCAPTCHA版本)

binding.webview.settings.javaScriptEnabled = true
binding.webview.setBackgroundColor(Color.TRANSPARENT)
binding.webview.webViewClient = object : WebViewClient() {
    override fun onPageFinished(view: WebView?, url: String?) {
        super.onPageFinished(view, url)

        binding.webview.loadUrl("javascript: if($('div.g-recaptcha').length)" +
                "{" +
                "var sitekey = $('div.g-recaptcha').attr('data-sitekey');" + // 获取现有reCAPTCHA元素的site-key
                "$('body > *').remove(); " + // 清空页面所有内容
                "$('body').append('<div id=\"captcha\"></div>'); " + // 创建用于渲染验证码的div
                "grecaptcha.render('captcha', {\n" + // 在新div中渲染reCAPTCHA
                "    'sitekey' : sitekey,\n" +
                "    'callback' : function(response){console.log('captchatoken:'+response)},\n" + // 回调中打印token到控制台
                "});" +
                "$('body').css('background-color','transparent');" + // 美化背景
                "}");
        binding.webview.visibility = View.VISIBLE // 验证码准备好后显示WebView
    }
}
binding.webview.webChromeClient = object : WebChromeClient() {
    override fun onConsoleMessage(consoleMessage: ConsoleMessage): Boolean {
        val message = consoleMessage.message()
        binding.txtToken.text = message
        if (message.startsWith("captchatoken:")) {
            val token = message.substring(13) // 移除前缀获取纯token

            if (token.isNotEmpty()){
                binding.txtToken.text = token
                Log.d(TAG, "onConsoleMessage: $token")
            }
        }
        return super.onConsoleMessage(consoleMessage)
    }
}
binding.webview.loadUrl("https://fbsbx.com/captcha/recaptcha/iframe/")

修改后的代码(适配FunCaptcha)

FunCaptcha的API逻辑和Google reCAPTCHA不同,主要修改点集中在JavaScript渲染部分,以下是调整后的完整代码:

binding.webview.settings.javaScriptEnabled = true
binding.webview.setBackgroundColor(Color.TRANSPARENT)
binding.webview.webViewClient = object : WebViewClient() {
    override fun onPageFinished(view: WebView?, url: String?) {
        super.onPageFinished(view, url)

        // 适配FunCaptcha的JavaScript逻辑
        binding.webview.loadUrl("javascript: if($('div[class*=\"fc-captcha\"]').length)" +
                "{" +
                "var publicKey = $('div[class*=\"fc-captcha\"]').attr('data-pkey');" + // 获取FunCaptcha的公钥(通常是data-pkey属性)
                "$('body > *').remove(); " + // 清空页面内容
                "$('body').append('<div id=\"captcha\"></div>'); " + // 创建渲染容器
                // 使用FunCaptcha的fc.render方法渲染验证码
                "fc.render('captcha', {\n" +
                "    'pkey' : publicKey,\n" +
                "    'callback' : function(response){console.log('captchatoken:'+response)},\n" + // 回调打印token到控制台
                "});" +
                "$('body').css('background-color','transparent');" +
                "}");
        binding.webview.visibility = View.VISIBLE
    }
}
binding.webview.webChromeClient = object : WebChromeClient() {
    override fun onConsoleMessage(consoleMessage: ConsoleMessage): Boolean {
        val message = consoleMessage.message()
        binding.txtToken.text = message
        if (message.startsWith("captchatoken:")) {
            val token = message.substring(13)
            if (token.isNotEmpty()){
                binding.txtToken.text = token
                Log.d(TAG, "onConsoleMessage: $token")
            }
        }
        return super.onConsoleMessage(consoleMessage)
    }
}
binding.webview.loadUrl("https://fbsbx.com/captcha/recaptcha/iframe/")

关键修改说明

  • 元素选择与密钥获取:将原reCAPTCHA的div.g-recaptcha和data-sitekey替换为FunCaptcha对应的元素(通常是带fc-captcha类的div)和公钥属性data-pkey
  • 渲染方法替换:用FunCaptcha的fc.render替代Google的grecaptcha.render,参数中用pkey传递公钥
  • 回调逻辑保留:保持原有的控制台输出逻辑,这样WebChromeClient可以继续通过监听控制台消息提取token
  • 注意事项:如果目标页面未自动加载FunCaptcha的SDK,需要在JavaScript中手动引入(比如添加$('body').append('<script src="https://cdn.arkoselabs.com/fc/1.2.8/fc.js"></script>');),确保fc对象可用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 07:36:12