NEW與 createTask 和 in.php 相同的 API,換個位址就能串接查看 API 文件
GATESOLVER
開始使用

自動化工具串接

不論使用哪種工具,做法都一樣:在頁面中讀取網站金鑰,透過 API 取得答案,再填入頁面。直接貼上常用工具的範例就能開始。

Selenium

用 Selenium 開啟頁面,讀取網站金鑰並透過 API 取得權杖,再填入 g-recaptcha-response 欄位。

  1. 1從頁面讀取 data-sitekey
  2. 2用 createTask 建立任務
  3. 3將權杖填入隱藏欄位並送出表單
from selenium import webdriver
from selenium.webdriver.common.by import By
import requests, time

API, KEY = "https://gatesolver.com", "YOUR_API_KEY"
driver = webdriver.Chrome()
driver.get("https://www.google.com/recaptcha/api2/demo")
site_key = driver.find_element(By.CSS_SELECTOR, "[data-sitekey]").get_attribute("data-sitekey")

task = requests.post(f"{API}/createTask", json={"clientKey": KEY, "task": {
    "type": "ReCaptchaV2TaskProxyLess", "websiteURL": driver.current_url, "websiteKey": site_key}}).json()
while True:
    time.sleep(3)
    r = requests.post(f"{API}/getTaskResult", json={"clientKey": KEY, "taskId": task["taskId"]}).json()
    if r.get("status") == "ready":
        break

driver.execute_script("document.getElementById('g-recaptcha-response').innerHTML = arguments[0]", r["solution"]["gRecaptchaResponse"])
driver.find_element(By.ID, "recaptcha-demo-submit").click()

Playwright

在 Playwright 中讀取 Turnstile 網站金鑰,並把取得的權杖填入 cf-turnstile-response 欄位。

  1. 1讀取網站金鑰
  2. 2透過 API 取得權杖
  3. 3填入權杖並送出
import { chromium } from "playwright";
const API = "https://gatesolver.com", KEY = "YOUR_API_KEY";
const post = (p, b) => fetch(API + p, { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify(b) }).then((r) => r.json());

const browser = await chromium.launch();
const page = await browser.newPage();
await page.goto("https://example.com/login");
const siteKey = await page.getAttribute(".cf-turnstile", "data-sitekey");

const { taskId } = await post("/createTask", { clientKey: KEY, task: { type: "AntiTurnstileTaskProxyLess", websiteURL: page.url(), websiteKey: siteKey } });
let r;
do { await page.waitForTimeout(3000); r = await post("/getTaskResult", { clientKey: KEY, taskId }); } while (r.status === "processing");

await page.evaluate((tk) => { document.querySelector("[name=cf-turnstile-response]").value = tk; }, r.solution.token);
await page.click("button[type=submit]");

Puppeteer

用 Puppeteer 取得 reCAPTCHA v3 權杖,放進網站送出的請求中。pageAction 值要與網站一致。

  1. 1找出網站金鑰與 action 值
  2. 2透過 API 取得 v3 權杖
  3. 3將權杖放進請求
import puppeteer from "puppeteer";
const API = "https://gatesolver.com", KEY = "YOUR_API_KEY";
const post = (p, b) => fetch(API + p, { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify(b) }).then((r) => r.json());

const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto("https://example.com/signup");

const { taskId } = await post("/createTask", { clientKey: KEY, task: {
  type: "ReCaptchaV3TaskProxyLess", websiteURL: page.url(), websiteKey: "6Lc...", pageAction: "signup" } });
let r;
do { await new Promise((s) => setTimeout(s, 3000)); r = await post("/getTaskResult", { clientKey: KEY, taskId }); } while (r.status === "processing");

await page.evaluate((tk) => { document.querySelector("#g-recaptcha-response").value = tk; }, r.solution.gRecaptchaResponse);

n8n

在 n8n 中用兩個 HTTP Request 節點建立任務並取得結果,中間用 Wait 節點等候 3 秒。

  1. 1HTTP Request: createTask
  2. 2Wait:3 秒
  3. 3HTTP Request: getTaskResult
Method: POST
URL: https://gatesolver.com/createTask
Body (JSON):
{
  "clientKey": "YOUR_API_KEY",
  "task": { "type": "ReCaptchaV2TaskProxyLess", "websiteURL": "{{ $json.url }}", "websiteKey": "{{ $json.sitekey }}" }
}

Method: POST
URL: https://gatesolver.com/getTaskResult
Body (JSON): { "clientKey": "YOUR_API_KEY", "taskId": "{{ $json.taskId }}" }

in.php 函式庫

專為 in.php 格式打造的函式庫,只要更換伺服器位址就能透過 GateSolver 辨識。

  1. 1在函式庫中設定 server 值
  2. 2填入 API 金鑰
  3. 3照常呼叫
import time, requests

B = "https://gatesolver.com"
r = requests.get(f"{B}/in.php", params={"key": "YOUR_API_KEY", "method": "userrecaptcha",
    "googlekey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-", "pageurl": "https://www.google.com/recaptcha/api2/demo", "json": 1}).json()
while True:
    time.sleep(3)
    res = requests.get(f"{B}/res.php", params={"key": "YOUR_API_KEY", "action": "get", "id": r["request"], "json": 1}).json()
    if res["request"] != "CAPCHA_NOT_READY":
        break
print(res["request"])