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

在Selenium Grid中使用CapSolver插件解决reCAPTCHA v2遇到问题

在Selenium Grid中加载CapSolver插件解决reCAPTCHA v2的问题

本地运行时通过--load-extension加载CapSolver插件能正常解决reCAPTCHA v2,但切换到Selenium Grid后失效,核心原因和解决方法如下:

1. 修复插件路径问题

本地的插件目录路径在Grid远程节点上不存在,--load-extension指向的是本地路径,远程节点无法访问。解决方式是将插件打包为CRX文件,再通过ChromeOptions添加:

  • 先把CapSolver插件打包成CRX:在Chrome浏览器中打开chrome://extensions/,开启开发者模式,点击"打包扩展程序",选择插件目录生成CRX文件。
  • 修改代码,用add_extension替代--load-extension参数:
def get_driver():
    crx_path = os.path.abspath('./capsolver.crx')
    chrome_options = Options()
    chrome_options.add_extension(crx_path)
    chrome_options.add_argument("--headless=new")
    chrome_options.add_argument("--disable-gpu")
    chrome_options.add_argument("--no-sandbox")
    chrome_options.add_argument("--disable-dev-shm-usage")

    selenium_url = os.getenv("SELENIUM_URL", "http://localhost:4444")
    driver = webdriver.Remote(
        command_executor=selenium_url,
        options=chrome_options
    )
    return driver

2. 注入CapSolver插件配置

远程Grid启动的浏览器是全新环境,插件没有保存的API密钥等配置,需要自动注入:

import time
from selenium.webdriver.common.by import By

def setup_capsolver(driver):
    # 先获取插件ID(本地运行时可通过chrome.extensions.getAll()获取)
    extension_id = "abcdefghijklmnopqrstuvwxyzabcdef"  # 替换为你的CapSolver插件ID
    # 打开插件选项页面
    driver.get(f"chrome-extension://{extension_id}/options.html")
    # 填写API密钥
    api_key_input = driver.find_element(By.ID, "apiKey")  # 替换为实际输入框选择器
    api_key_input.send_keys("YOUR_CAPSOLVER_API_KEY")
    # 保存设置
    save_button = driver.find_element(By.ID, "saveBtn")
    save_button.click()
    time.sleep(2)  # 等待设置生效

调用get_driver()后,执行setup_capsolver(driver)完成配置。

3. 排查无头模式兼容性

新无头模式(--headless=new)可能对插件支持有限,尝试切换为旧版无头模式测试:

chrome_options.add_argument("--headless=chrome")  # 替换原来的--headless=new

如果切换后正常,说明新无头模式存在插件兼容性问题,可以暂时使用旧版,或者等待Chrome更新修复。

4. 验证插件是否成功加载

在代码中添加验证步骤,确认插件已被Grid节点的浏览器加载:

extensions = driver.execute_script("return chrome.extensions.getAll();")
for ext in extensions:
    if ext.name == "CapSolver":  # 替换为插件的实际名称
        print("CapSolver插件已加载")
        break
else:
    print("CapSolver插件未加载,请检查配置")

如果插件未加载,检查CRX文件是否正确上传到Grid节点可访问的路径,或者确认Grid节点的Chrome配置允许加载第三方插件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 03:14:57