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

如何将Google reCAPTCHA从PC端同步至手机端完成验证

解决方案

先搞懂核心逻辑

reCAPTCHA和当前请求的会话Cookie是绑定死的,直接把验证链接发手机没用——手机浏览器没PC端的Cookie,验证完PC程序也认不了。正确路子是:

  • PC端检测到触发验证时,把验证需要的关键信息(比如网站的reCAPTCHA密钥、当前会话ID、目标页面地址)传给手机
  • 手机端加载验证组件完成验证,把生成的**验证令牌(g-recaptcha-response)**传回PC
  • PC把令牌填回原请求里,程序就能继续跑了

PC端Python实现步骤

1. 检测验证触发

用Selenium或者Requests库请求页面时,判断有没有reCAPTCHA元素:

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("目标网站URL")

# 检查是否出现reCAPTCHA
if driver.find_elements_by_class_name("g-recaptcha"):
    # 提取关键参数:网站的reCAPTCHA密钥、当前会话Cookie、目标页面地址
    site_key = driver.find_element_by_class_name("g-recaptcha").get_attribute("data-sitekey")
    session_cookies = driver.get_cookies()
    target_url = driver.current_url

    # 接下来要等手机传验证结果,先搭个接收通道

2. 搭PC和手机的通信通道

推荐用本地HTTP服务(比如Flask)或者WebSocket,这里给个Flask的简单例子:

from flask import Flask, request
import threading

app = Flask(__name__)
verification_token = None

# 接收手机传回的验证令牌
@app.route('/send-token', methods=['POST'])
def receive_token():
    global verification_token
    verification_token = request.json.get('token')
    return {"ok": True}

# 后台启动HTTP服务,让手机能访问到
threading.Thread(target=app.run, kwargs={'host': '0.0.0.0', 'port': 5000}, daemon=True).start()

# 循环等结果,拿到令牌就继续
while verification_token is None:
    time.sleep(1)

# 把令牌塞回页面的reCAPTCHA输入框,提交表单
driver.execute_script(f'document.getElementById("g-recaptcha-response").value = "{verification_token}";')
driver.find_element_by_id("提交按钮ID").click()

Flutter手机端实现步骤

1. 从PC端拿验证任务

先通过HTTP请求获取PC那边的验证参数(要确保PC和手机在同一局域网,用PC的局域网IP访问):

import 'package:http/http.dart' as http;
import 'dart:convert';

// 替换成你的PC局域网IP
final pcIp = "192.168.1.100";
final response = await http.get(Uri.parse('http://$pcIp:5000/get-task'));
final taskData = jsonDecode(response.body);
final siteKey = taskData['site_key'];
final targetUrl = taskData['target_url'];

2. 完成reCAPTCHA验证

用flutter_recaptcha_v2插件来做验证,比自己搭网页方便:

import 'package:flutter_recaptcha_v2/flutter_recaptcha_v2.dart';

// 弹出验证窗口
final recaptcha = RecaptchaV2(
  siteKey: siteKey,
  url: targetUrl,
);
final token = await recaptcha.showDialog(context);

// 验证成功就把令牌发回PC
if (token != null) {
  await http.post(
    Uri.parse('http://$pcIp:5000/send-token'),
    body: jsonEncode({'token': token}),
    headers: {'Content-Type': 'application/json'},
  );
}

几个要注意的点

  • 必须保证PC和手机在同一局域网,或者用公网MQTT服务中转,不然手机连不上PC的HTTP服务
  • 有些网站会验证Cookie的一致性,如果遇到验证失败,可以把PC端的Cookie传给手机,手机验证时带上这些Cookie
  • 别频繁刷请求,加个随机延迟、模拟滚动页面这些操作,能减少触发reCAPTCHA的概率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 00:03:10