Tích Hợp

Tập lệnh Google Apps + CaptchaAI: Tự động hóa CAPTCHA bảng tính

Google Apps Script cho phép bạn tự động hóa các tác vụ bên trong Google Trang tính, Tài liệu và các sản phẩm Workspace khác. Khi quy trình làm việc trong bảng tính của bạn liên quan đến hình ảnh CAPTCHA – những thách thức OCR từ nguồn dữ liệu, hình ảnh xác minh hoặc CAPTCHA dựa trên văn bản –CaptchaAIcó thể giải quyết chúng trực tiếp từ Apps Script bằng UrlFetchApp.

Hướng dẫn này cho biết cách xây dựng chức năng tùy chỉnh trong Google Trang tính gửi hình ảnh CAPTCHA tới CaptchaAI và trả về văn bản đã giải quyết.

Kịch bản thế giới thực

Bạn có một Trang tính Google có các URL trỏ đến hình ảnh CAPTCHA cần được giải quyết. Thay vì giải quyết chúng theo cách thủ công, bạn viết một hàm Apps Script:

  1. Tìm nạp từng hình ảnh CAPTCHA từ URL
  2. Chuyển đổi nó thành base64
  3. Gửi nó tới CaptchaAI
  4. Trả lại văn bản đã giải quyết vào ô bảng tính

Bước 1: Thiết lập dự án Apps Script

Trong Trang tính Google của bạn:

  1. Đi tới Tiện ích mở rộngTập lệnh ứng dụng
  2. Tạo một tệp tập lệnh mới có tên captchaai.gs

Bước 2: Viết Bộ giải CaptchaAI

// captchaai.gs

// Store your API key in Script Properties for security
// File → Project Properties → Script Properties → Add: CAPTCHAAI_KEY
function getApiKey() {
  return PropertiesService.getScriptProperties().getProperty('CAPTCHAAI_KEY');
}

/**

 * Solve an image CAPTCHA from a URL.
 * @param {string} imageUrl URL of the CAPTCHA image to solve.
 * @return {string} The solved CAPTCHA text.
 * @customfunction
 */
function SOLVE_CAPTCHA(imageUrl) {
  if (!imageUrl) return 'No URL provided';

  try {
    // Fetch the image and convert to base64
    var imageResponse = UrlFetchApp.fetch(imageUrl);
    var imageBlob = imageResponse.getBlob();
    var base64Image = Utilities.base64Encode(imageBlob.getBytes());

    // Submit to CaptchaAI
    var taskId = submitCaptcha(base64Image);
    if (!taskId) return 'Submit failed';

    // Poll for result
    var result = pollForResult(taskId);
    return result || 'Solve failed';
  } catch (e) {
    return 'Error: ' + e.message;
  }
}

/**

 * Solve an image CAPTCHA from base64 text in a cell.
 * @param {string} base64Image Base64-encoded CAPTCHA image.
 * @return {string} The solved CAPTCHA text.
 * @customfunction
 */
function SOLVE_CAPTCHA_BASE64(base64Image) {
  if (!base64Image) return 'No image data';

  try {
    var taskId = submitCaptcha(base64Image);
    if (!taskId) return 'Submit failed';

    var result = pollForResult(taskId);
    return result || 'Solve failed';
  } catch (e) {
    return 'Error: ' + e.message;
  }
}

function submitCaptcha(base64Image) {
  var apiKey = getApiKey();

  var payload = {
    'key': apiKey,
    'method': 'base64',
    'body': base64Image,
    'json': '1'
  };

  var options = {
    'method': 'post',
    'payload': payload,
    'muteHttpExceptions': true
  };

  var response = UrlFetchApp.fetch(
    'https://ocr.captchaai.com/in.php', options
  );
  var result = JSON.parse(response.getContentText());

  if (result.status === 1) {
    return result.request;
  }

  Logger.log('Submit error: ' + result.request);
  return null;
}

function pollForResult(taskId) {
  var apiKey = getApiKey();
  var maxAttempts = 20;

  // Initial wait
  Utilities.sleep(5000);

  for (var i = 0; i < maxAttempts; i++) {
    var url = 'https://ocr.captchaai.com/res.php'
      + '?key=' + apiKey
      + '&action=get'
      + '&id=' + taskId
      + '&json=1';

    var response = UrlFetchApp.fetch(url, {muteHttpExceptions: true});
    var result = JSON.parse(response.getContentText());

    if (result.status === 1) {
      return result.request;
    }

    if (result.request !== 'CAPCHA_NOT_READY') {
      Logger.log('Solve error: ' + result.request);
      return null;
    }

    Utilities.sleep(5000);
  }

  return null; // Timeout
}

Bước 3: Định cấu hình lưu trữ khóa API

Lưu trữ khóa API của bạn một cách an toàn trong Thuộc tính tập lệnh:

  1. Trong trình chỉnh sửa Apps Script, hãy nhấp vào Cài đặt dự án (biểu tượng bánh răng)
  2. Cuộn đến Thuộc tính tập lệnh
  3. Nhấp vào Thêm thuộc tính tập lệnh
  4. Thuộc tính: CAPTCHAAI_KEY, Giá trị: khóa API CaptchaAI của bạn
  5. Lưu

Bước 4: Sử dụng trong Google Trang tính

Là một chức năng tùy chỉnh

Trong bất kỳ ô nào, hãy sử dụng công thức:

=SOLVE_CAPTCHA("https://example.com/captcha-image.jpg")

Hoặc đối với dữ liệu base64 đã có trong một ô:

=SOLVE_CAPTCHA_BASE64(A2)

Xử lý hàng loạt bằng một menu

Để xử lý nhiều CAPTCHA, hãy thêm menu tùy chỉnh xử lý một cột URL hình ảnh:

function onOpen() {
  SpreadsheetApp.getUi().createMenu('CaptchaAI')
    .addItem('Solve Column A CAPTCHAs', 'solveColumnCaptchas')
    .addItem('Check Balance', 'checkBalance')
    .addToUi();
}

function solveColumnCaptchas() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var lastRow = sheet.getLastRow();
  var urls = sheet.getRange('A2:A' + lastRow).getValues();

  for (var i = 0; i < urls.length; i++) {
    if (!urls[i][0]) continue;

    var row = i + 2;
    var existingResult = sheet.getRange('B' + row).getValue();
    if (existingResult) continue; // Skip already solved

    sheet.getRange('B' + row).setValue('Solving...');
    SpreadsheetApp.flush();

    var result = SOLVE_CAPTCHA(urls[i][0]);
    sheet.getRange('B' + row).setValue(result);
    sheet.getRange('C' + row).setValue(new Date()); // Timestamp

    // Avoid hitting Apps Script quotas
    Utilities.sleep(1000);
  }

  SpreadsheetApp.getUi().alert('Batch solving complete!');
}

function checkBalance() {
  var apiKey = getApiKey();
  var url = 'https://ocr.captchaai.com/res.php'
    + '?key=' + apiKey
    + '&action=getbalance'
    + '&json=1';

  var response = UrlFetchApp.fetch(url);
  var result = JSON.parse(response.getContentText());

  SpreadsheetApp.getUi().alert(
    'CaptchaAI Balance: $' + result.request
  );
}

Bước 5: Bố cục bảng tính

Cột A (URL hình ảnh) Cột B (Kết quả) Cột C (Giải quyết tại)
https://example.com/captcha1.jpg ABC123 2026-04-04 10:15:00
https://example.com/captcha2.jpg XYZ789 2026-04-04 10:15:12
https://example.com/captcha3.jpg Giải quyết...

Khắc phục sự cố

Vấn đề Nguyên nhân Cách xử lý
TypeError: Cannot read property 'getProperty' Thuộc tính tập lệnh chưa được đặt Thêm CAPTCHAAI_KEY trong Cài đặt dự án
Exception: Address unavailable URL hình ảnh bị chặn hoặc không hợp lệ Xác minh URL hình ảnh có thể truy cập được từ máy chủ của Google
Hàm tùy chỉnh trả về Loading... mãi mãi Hết thời gian thực thi Apps Script (30 giây đối với các chức năng tùy chỉnh) Thay vào đó, hãy sử dụng cách tiếp cận menu hàng loạt - các chức năng menu có giới hạn 6 phút
ERROR_ZERO_BALANCE Tài khoản không có tín dụng Nạp tiền vào số dư CaptchaAI của bạn
Đã vượt quá hạn ngạch UrlFetchApp Quá nhiều lệnh gọi API Thêm Utilities.sleep() giữa các cuộc gọi; xử lý theo lô nhỏ hơn

Câu hỏi thường gặp

Giới hạn thực thi Apps Script là gì?

Chức năng tùy chỉnh: 30 giây. Chức năng kích hoạt menu: 6 phút. Trình kích hoạt theo thời gian: 6 phút (hoặc 30 phút đối với Google Workspace). Lập kế hoạch kích thước lô cho phù hợp.

Tôi có thể giải reCAPTCHA v2 từ Apps Script không?

Có, nhưng bạn cần có khóa trang và URL trang. Sử dụng method=userrecaptcha thay vì method=base64 và chuyển các tham số googlekeypageurl.

Làm cách nào để xử lý giới hạn tỷ lệ?

Thêm Utilities.sleep(1000) giữa các yêu cầu giải quyết. CaptchaAI không có giới hạn tốc độ nghiêm ngặt nhưng UrlFetchApp của Apps Script có hạn ngạch hàng ngày (20.000 cuộc gọi cho người tiêu dùng, 100.000 cho Workspace).

Tôi có thể lên lịch giải quyết hàng loạt không?

Vâng. Sử dụng Trình kích hoạt (Chỉnh sửa -> Trình kích hoạt) của Apps Script để chạy solveColumnCaptchas theo lịch trình (hàng giờ, hàng ngày, v.v.).

Các bước tiếp theo

Tự động giải quyết CAPTCHA từ Google Trang tính của bạn —lấy khóa API CaptchaAI của bạnvà thêm tập lệnh vào bảng tính của bạn.

Hướng dẫn liên quan:

Os comentários estão desativados para este artigo.