You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python+Selenium:无头模式下将网站reCAPTCHA提取至桌面GUI应用供用户处理的可行性咨询

实现方案:在桌面应用内完成reCAPTCHA验证并同步到Headless Selenium

当然可以做到!你的需求本质是把网站上的reCAPTCHA验证环节转移到自己的桌面应用里,让用户在本地完成验证后再把结果传给headless的Selenium,完全可行,而且符合reCAPTCHA的使用规范(毕竟是真实用户手动操作,不是自动化破解)。下面是具体的实现思路和步骤:

核心逻辑

reCAPTCHA的验证最终是通过验证token来确认用户身份的——只要能获取到用户完成验证后生成的有效token,再把这个token注入到headless浏览器的页面中,就能绕过网站端的验证步骤,直接提交表单。

具体实现步骤

1. 用Headless Selenium加载页面并获取reCAPTCHA的Site Key

首先启动headless模式的浏览器,加载目标登录页面,提取页面中reCAPTCHA组件的data-sitekey属性(这是网站向Google申请的验证密钥,必须匹配才能生成有效token)。

示例Python代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options

# 配置Headless Chrome
chrome_options = Options()
chrome_options.add_argument("--headless=new")
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--no-sandbox")

driver = webdriver.Chrome(options=chrome_options)
driver.get("你的目标登录页面URL")

# 定位reCAPTCHA组件并获取Site Key
try:
    recaptcha_div = driver.find_element(By.CSS_SELECTOR, "div.g-recaptcha")
    site_key = recaptcha_div.get_attribute("data-sitekey")
except Exception as e:
    print(f"找不到reCAPTCHA组件: {e}")
    driver.quit()

2. 在桌面应用中嵌入reCAPTCHA验证界面

在你的桌面应用(比如用PyQt、Tkinter、Electron等开发)里,嵌入一个WebView组件,加载包含reCAPTCHA的自定义HTML页面,让用户在这个WebView里完成验证。

以PyQt的QWebEngineView为例,你可以构造这样的HTML:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <script src="https://www.google.com/recaptcha/api.js"></script>
</head>
<body style="margin:0; display:flex; justify-content:center; align-items:center; height:100vh;">
    <div class="g-recaptcha" 
         data-sitekey="替换成你刚才获取的site_key"
         data-callback="sendTokenToApp">
    </div>
    <script>
        // 验证成功后,把token传给桌面应用的Python逻辑
        function sendTokenToApp(token) {
            if (window.pyBridge) {
                window.pyBridge.onCaptchaCompleted(token);
            }
        }
    </script>
</body>
</html>

然后在PyQt中加载这个HTML,并通过桥接机制获取用户完成验证后的token。

3. 将验证token注入到Headless浏览器并提交表单

拿到用户提供的有效token后,通过Selenium的execute_script方法,把token填充到页面中reCAPTCHA对应的隐藏输入框(通常是g-recaptcha-response),然后提交登录表单。

示例代码:

# 假设user_provided_token是从桌面应用获取的验证token
if user_provided_token:
    # 注入token到页面的隐藏输入框
    driver.execute_script("""
        const responseInput = document.getElementById('g-recaptcha-response');
        if (responseInput) {
            responseInput.value = arguments[0];
            // 触发reCAPTCHA的验证完成事件(部分网站需要)
            const event = new Event('input');
            responseInput.dispatchEvent(event);
        }
    """, user_provided_token)
    
    # 提交登录表单(根据实际页面的表单选择器调整)
    try:
        login_form = driver.find_element(By.ID, "login-form")
        login_form.submit()
        print("表单提交成功")
    except Exception as e:
        print(f"提交表单失败: {e}")

# 完成后关闭浏览器
driver.quit()

关键注意事项

  • 版本适配:如果网站使用的是reCAPTCHA v3(无手动验证,后台评分),这个方案不适用;但如果是v2的复选框/图片验证,完全兼容。
  • 跨域与权限:桌面应用的WebView需要允许加载Google的reCAPTCHA脚本,部分框架可能需要配置跨域权限。
  • 合规性:确保你的使用符合Google reCAPTCHA的服务条款——你的场景是真实用户手动验证,属于合规范畴,不要将token用于自动化批量操作。
  • Site Key匹配:必须使用目标网站的真实Site Key,否则生成的token无法被网站校验通过。

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

火山引擎 最新活动