Selenium tự động hóa các tương tác trên trình duyệt, nhưng CAPTCHA ngăn chặn điều đó. API của CaptchaAI giải quyết CAPTCHA từ bên ngoài trong khi Selenium xử lý trình duyệt — bạn trích xuất các tham số CAPTCHA, gửi chúng tới API và đưa mã thông báo được trả về.
Yêu cầu
| Yêu cầu | Chi tiết |
|---|---|
| Python 3.7+ | Đã cài đặt pip |
| Selen | pip install selenium |
| Chrome + ChromeDriver | Phiên bản phù hợp |
| yêu cầu | pip install requests |
| Khóa API CaptchaAI | Từcaptchaai.com |
Nó hoạt động như thế nào
- Selenium tải trang đích
- Tập lệnh của bạn trích xuất khóa trang CAPTCHA từ trang DOM
- CaptchaAI giải CAPTCHA bằng khóa trang và URL trang
- Tập lệnh của bạn đưa mã thông báo vào trang và gửi biểu mẫu
CAPTCHA được giải quyết phía máy chủ bởi CaptchaAI - Selenium không bao giờ tương tác trực tiếp với tiện ích CAPTCHA.
Bước 1: Thiết lập Selenium
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
options = Options()
options.add_argument("")
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36")
driver = webdriver.Chrome(options=options)
Cờ AutomationControlled giúp tránh bị phát hiện bot cơ bản. Để có cấu hình tàng hình mạnh hơn, hãy thêm:
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option("useAutomationExtension", False)
Bước 2: Tạo Bộ giải CAPTCHA
import requests
import time
API_KEY = "YOUR_API_KEY"
def solve_recaptcha_v2(site_key, page_url):
"""Solve reCAPTCHA v2 using CaptchaAI API."""
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": site_key,
"pageurl": page_url
})
if not resp.text.startswith("OK|"):
raise Exception(f"Submit failed: {resp.text}")
task_id = resp.text.split("|")[1]
for _ in range(60):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY,
"action": "get",
"id": task_id
})
if result.text == "CAPCHA_NOT_READY":
continue
if result.text.startswith("OK|"):
return result.text.split("|")[1]
raise Exception(f"Solve failed: {result.text}")
raise TimeoutError("CAPTCHA solve timed out")
Bước 3: Trích xuất khóa trang web và giải quyết
# Navigate to the target page
driver.get("https://staging.example.com/qa-login")
# Wait for the reCAPTCHA to load
wait = WebDriverWait(driver, 10)
recaptcha = wait.until(
EC.presence_of_element_located((By.CLASS_NAME, "g-recaptcha"))
)
# Extract the site key
site_key = recaptcha.get_attribute("data-sitekey")
page_url = driver.current_url
print(f"Site key: {site_key}")
print(f"Page URL: {page_url}")
# Solve the CAPTCHA
token = solve_recaptcha_v2(site_key, page_url)
print(f"Token received: {token[:50]}...")
Bước 4: Bơm mã thông báo và gửi
# Inject the token into the reCAPTCHA response field
driver.execute_script(f"""
document.getElementById('g-recaptcha-response').innerHTML = '{token}';
document.getElementById('g-recaptcha-response').style.display = '';
""")
# If the form uses a callback function, trigger it
driver.execute_script(f"""
if (typeof ___grecaptcha_cfg !== 'undefined') {{
Object.keys(___grecaptcha_cfg.clients).forEach(function(key) {{
var client = ___grecaptcha_cfg.clients[key];
if (client.callback) client.callback('{token}');
}});
}}
""")
# Submit the form
driver.find_element(By.CSS_SELECTOR, "form").submit()
# Wait for navigation
wait.until(EC.url_changes(page_url))
print(f"Success! Now on: {driver.current_url}")
Ví dụ làm việc đầy đủ
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import requests
import time
API_KEY = "YOUR_API_KEY"
def solve_recaptcha_v2(site_key, page_url):
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": site_key,
"pageurl": page_url
})
if not resp.text.startswith("OK|"):
raise Exception(f"Submit failed: {resp.text}")
task_id = resp.text.split("|")[1]
for _ in range(60):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "get", "id": task_id
})
if result.text == "CAPCHA_NOT_READY":
continue
if result.text.startswith("OK|"):
return result.text.split("|")[1]
raise Exception(f"Solve failed: {result.text}")
raise TimeoutError("Timed out")
def main():
options = Options()
options.add_argument("")
driver = webdriver.Chrome(options=options)
try:
driver.get("https://staging.example.com/qa-login")
wait = WebDriverWait(driver, 10)
# Extract site key
recaptcha = wait.until(
EC.presence_of_element_located((By.CLASS_NAME, "g-recaptcha"))
)
site_key = recaptcha.get_attribute("data-sitekey")
# Solve
token = solve_recaptcha_v2(site_key, driver.current_url)
# Inject and submit
driver.execute_script(
f"document.getElementById('g-recaptcha-response').innerHTML = '{token}';"
)
driver.find_element(By.CSS_SELECTOR, "form").submit()
wait.until(EC.url_changes(driver.current_url))
print("Login successful!")
finally:
driver.quit()
if __name__ == "__main__":
main()
Xử lý các loại CAPTCHA khác nhau
reCAPTCHA v3
def solve_recaptcha_v3(site_key, page_url, action="verify"):
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": site_key,
"pageurl": page_url,
"version": "v3",
"action": action
})
task_id = resp.text.split("|")[1]
# ... same polling logic
Cloudflare Turnstile
def solve_turnstile(site_key, page_url):
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY,
"method": "turnstile",
"sitekey": site_key,
"pageurl": page_url
})
task_id = resp.text.split("|")[1]
# ... same polling logic
Khắc phục sự cố
| Vấn đề | Nguyên nhân | Cách xử lý |
|---|---|---|
| Mã thông báo bị từ chối | Mã thông báo đã hết hạn trước khi gửi | Tiêm và nộp trong vòng 120 giây |
| Không tìm thấy khóa trang web | CAPTCHA tải động | Thêm WebDriverWait với thời gian chờ lâu hơn |
NoSuchElementException |
Bộ chọn sai | Kiểm tra trang để tìm phần tử chính xác |
| Phiên bản ChromeDriver không khớp | Chrome đã cập nhật | Tải xuống phiên bản ChromeDriver phù hợp |
| Phát hiện bot mặc dù mã thông báo chính xác | Chống bot ngoài CAPTCHA | Thêm tùy chọn ẩn, sử dụng chromedriver không bị phát hiện |
Câu hỏi thường gặp
Tôi có thể chạy Selenium ở chế độ headless với CaptchaAI không?
Vâng. CaptchaAI giải quyết CAPTCHA phía máy chủ - trình duyệt chỉ cần tải trang để trích xuất khóa trang. Chế độ headless hoạt động tốt.
Tôi có cần nhấp vào hộp kiểm CAPTCHA không?
Không. CaptchaAI trả về mã thông báo mà bạn đưa trực tiếp vào biểu mẫu. Không cần tương tác trực quan với tiện ích CAPTCHA.
Còn reCAPTCHA với lệnh gọi lại thì sao?
Một số trang web sử dụng lệnh gọi lại JavaScript thay vì gửi biểu mẫu. Sử dụng driver.execute_script() để kích hoạt lệnh gọi lại bằng mã thông báo đã giải quyết. Nhìn thấyCách giải quyết cuộc gọi lại reCAPTCHA v2.