C¨¢ch gi?i quy?t CAPTCHA tr¨ºn BrowserStack v?i API CapSolver

Ethan Collins
Pattern Recognition Specialist
12-Sep-2025

BrowserStack
l¨¤ m?t n?n t?ng ki?m th? d?a tr¨ºn ?¨¢m m?y h¨¤ng ??u ???c c¨¢c nh¨¤ ph¨¢t tri?n, nh¨®m QA v¨¤ k? s? t? ??ng h¨®a s? d?ng r?ng r?i ?? ch?y t? ??ng h¨®a web, ki?m th? tr¨¬nh duy?t v¨¤ thu th?p d? li?u web quy m? l?n. N¨® cung c?p quy?n truy c?p t?c th¨¬ v¨¤o h¨¤ng ngh¨¬n tr¨¬nh duy?t, thi?t b? v¨¤ h? ?i?u h¨¤nh th?c, gi¨²p vi?c ki?m th? ?a tr¨¬nh duy?t, ki?m th? di ??ng v¨¤ t? ??ng h¨®a b?ng c¨¢c c?ng c? nh? Selenium, Playwright v¨¤ Puppeteer tr? n¨ºn d? d¨¤ng h?n nhi?u.
??i v?i c¨¢c nh¨®m x?y d?ng tr¨¬nh duy?t t? ??ng, bot ho?c c?ng c? thu th?p d? li?u quy m? l?n, BrowserStack lo?i b? nhu c?u duy tr¨¬ c? s? h? t?ng v?t l?. Tuy nhi¨ºn, khi c¨¢c b¨¤i ki?m tra ho?c tr¨¬nh thu th?p d? li?u t??ng t¨¢c v?i c¨¢c trang web s?n xu?t s? d?ng c¨¢c bi?n ph¨¢p ch?ng bot, CAPTCHA th??ng l¨¤m gi¨¢n ?o?n quy tr¨¬nh l¨¤m vi?c, g?y ra l?i ho?c y¨ºu c?u can thi?p th? c?ng.
CapSolver
l¨¤ m?t d?ch v? gi?i quy?t CAPTCHA d?a tr¨ºn AI x? l? nhi?u lo?i CAPTCHA, bao g?m reCAPTCHA v¨¤ Cloudflare Turnstile, v?i ?? ch¨ªnh x¨¢c v¨¤ t?c ?? cao. Vi?c t¨ªch h?p CapSolver v?i BrowserStack ??m b?o t? ??ng h¨®a m??t m¨¤ h?n, gi¨²p c¨¢c ???ng d?n CI/CD, b? ki?m tra v¨¤ t¨¢c v? thu th?p d? li?u hi?u qu? v¨¤ ?¨¢ng tin c?y.
T?ng quan v¨¤ tr??ng h?p s? d?ng BrowserStack
BrowserStack l¨¤ m?t n?n t?ng ki?m th? ???c t?ng c??ng b?ng AI, t¨¢i t?o v¨°ng ??i ki?m th?, cung c?p c¨¢c gi?i ph¨¢p to¨¤n di?n cho vi?c ki?m th? tr¨¬nh duy?t v¨¤ ?ng d?ng. B?ng c¨¢ch t?n d?ng kho d? li?u th?ng nh?t v¨¤ c¨¢c t¨¢c nh?n AI, n¨® gi¨²p t?ng t?c t? ??ng h¨®a ki?m th? v¨¤ c?i thi?n ?? tin c?y ? quy m? l?n. C¨¢c nh¨®m c¨® th? ch?y c¨¢c b¨¤i ki?m tra ?a tr¨¬nh duy?t v¨¤ di ??ng tr¨ºn c¨¢c thi?t b? th?c, th?c hi?n ki?m tra UI v¨¤ ??u cu?i t? ??ng b?ng c¨¢c khung nh? Selenium, Playwright, v¨¤ Puppeteer
, v¨¤ bao g?m c¨¢c ki?m tra tr?c quan v¨¤ kh? n?ng truy c?p ¡ª t?t c? ??u ???c t¨ªch h?p v?i c¨¢c c?ng c? CI/CD nh? Jenkins, Travis CI v¨¤ GitLab.
Trong c¨¢c quy tr¨¬nh l¨¤m vi?c t? ??ng h¨®a n?ng, ch?ng h?n nh? ki?m th? ??u cu?i th??ng m?i ?i?n t? ho?c x¨¢c th?c lu?ng ??ng nh?p, CAPTCHA th??ng ho?t ??ng nh? c¨¢c bi?n ph¨¢p ph¨°ng th? ch?ng bot, l¨¤m gi¨¢n ?o?n c¨¢c t?p l?nh v¨¤ gi?m ?? tin c?y. CapSolver
cung c?p m?t gi?i ph¨¢p t? ??ng, x? l? li?n m?ch c¨¢c th¨¢ch th?c n¨¤y ?? gi? cho c¨¢c b¨¤i ki?m tra ch?y tr?n tru.
T?i sao c?n gi?i quy?t CAPTCHA
Trong qu¨¢ tr¨¬nh ki?m th? t? ??ng tr¨ºn BrowserStack, c¨¢c t?p l?nh c¨® th? ?i?u h??ng ??n c¨¢c trang web ???c b?o v? b?i c¨¢c h? th?ng ch?ng bot tri?n khai CAPTCHA ?? ng?n ch?n truy c?p theo t?p l?nh. Nh?ng th¨¢ch th?c n¨¤y¡ªc¨® m?c ?¨ªch x¨¢c minh ng??i d¨´ng¡ªc¨® th? g?y ra l?i ki?m tra, k?t qu? kh?ng ?n ??nh ho?c c?n ph?i ghi ?¨¨ th? c?ng, l¨¤m suy y?u hi?u qu? c?a c¨¢c ???ng d?n CI/CD. V¨ª d?: vi?c ki?m tra g?i bi?u m?u tr¨ºn m?t trang web c¨® reCAPTCHA c¨® th? th?t b?i n?u kh?ng c¨® c¨¢ch n¨¤o ?? gi?i quy?t th¨¢ch th?c b?ng l?p tr¨¬nh.
C¨¢c lo?i CAPTCHA ph? bi?n bao g?m:
Lo?i CAPTCHA | M? t? |
---|---|
reCAPTCHA v2 | Y¨ºu c?u ng??i d¨´ng ch?n h?p ho?c ch?n h¨¬nh ?nh d?a tr¨ºn l?i nh?c. |
reCAPTCHA v3 | S? d?ng h? th?ng ?i?m ?? ?¨¢nh gi¨¢ h¨¤nh vi c?a ng??i d¨´ng, th??ng v? h¨¬nh ??i v?i ng??i d¨´ng. |
Cloudflare Turnstile | M?t l?a ch?n thay th? CAPTCHA t?p trung v¨¤o quy?n ri¨ºng t? gi¨²p gi?m thi?u s? t??ng t¨¢c c?a ng??i d¨´ng. |
Vi?c t¨ªch h?p CapSolver v¨¤o c¨¢c b¨¤i ki?m tra BrowserStack cho ph¨¦p c¨¢c t?p l?nh t? ??ng gi?i quy?t c¨¢c CAPTCHA n¨¤y m?t c¨¢ch ??ng, ??m b?o c¨¢c b¨¤i ki?m tra ch?y tr?n tru tr¨ºn nhi?u m?i tr??ng kh¨¢c nhau m¨¤ kh?ng b? gi¨¢n ?o?n.
C¨¢ch s? d?ng CapSolver ?? x? l? CAPTCHA
API c?a CapSolver gi?i quy?t CAPTCHA b?ng c¨¢ch g?i t¨¢c v? v¨¤ l?y gi?i ph¨¢p th?ng qua c¨¢c y¨ºu c?u HTTP ??n gi?n. ?? t¨ªch h?p n¨® v?i BrowserStack, h?y k?t h?p c¨¢c cu?c g?i CapSolver v¨¤o c¨¢c t?p l?nh t? ??ng h¨®a (v¨ª d?: Selenium, Playwright ho?c Puppeteer) ch?y tr¨ºn l??i t? xa c?a BrowserStack.
C¨¢c b??c ?? t¨ªch h?p CapSolver v?i BrowserStack
- ??ng k? CapSolver: ??ng k? t?i
CapSolver Dashboard
, th¨ºm ti?n v¨¤ l?y kh¨®a API c?a b?n. - Thi?t l?p BrowserStack: T?o t¨¤i kho?n BrowserStack, l?y t¨ºn ng??i d¨´ng v¨¤ kh¨®a truy c?p c?a b?n v¨¤ c?u h¨¬nh khung t? ??ng h¨®a c?a b?n ?? k?t n?i v?i trung t?m c?a BrowserStack.
- C¨¤i ??t c¨¢c ph? thu?c: T¨´y thu?c v¨¤o khung c?a b?n, h?y c¨¤i ??t c¨¢c g¨®i nh?
selenium
,playwright
ho?cpyppeteer
. - Th¨ºm logic CapSolver: Trong t?p l?nh c?a b?n, ph¨¢t hi?n CAPTCHA (v¨ª d?: b?ng kh¨®a trang web), t?o t¨¢c v? CapSolver, ki?m tra gi?i ph¨¢p v¨¤ ti¨ºm n¨® v¨¤o trang.
- Ch?y c¨¢c b¨¤i ki?m tra tr¨ºn BrowserStack: Th?c thi c¨¢c t?p l?nh tr¨ºn nhi?u c?u h¨¬nh BrowserStack (v¨ª d?: Windows/Chrome, macOS/Safari) ?? x¨¢c minh vi?c x? l? CAPTCHA tr¨ºn nhi?u n?n t?ng.
?o?n m? ch¨ªnh
D??i ??y l¨¤ m?t h¨¤m Python c? b?n ?? gi?i quy?t reCAPTCHA v2 b?ng CapSolver:
python
import requests
import time
API_KEY = "YOUR_CAPSOLVER_API_KEY"
def solve_captcha(site_key, url):
# T?o t¨¢c v? Capsolver
create_task = {
"clientKey": API_KEY,
"task": {
"type": "ReCaptchaV2TaskProxyless",
"websiteURL": url,
"websiteKey": site_key,
}
}
resp = requests.post("https://api.capsolver.com/createTask", json=create_task)
task_id = resp.json().get("taskId")
if not task_id:
raise RuntimeError("Kh?ng th? t?o t¨¢c v? CapSolver")
# Ki?m tra k?t qu?
while True:
result = requests.post(
"https://api.capsolver.com/getTaskResult",
json={"clientKey": API_KEY, "taskId": task_id}
)
payload = result.json()
if payload.get("status") == "ready":
return payload["solution"]["gRecaptchaResponse"]
time.sleep(2)
Ghi ch¨²:
- Thay th?
YOUR_CAPSOLVER_API_KEY
b?ng kh¨®a API th?c t? c?a b?n. - ?? gi?i quy?t c¨¢c lo?i CAPTCHA kh¨¢c, h?y c?p nh?t tr??ng
type
trong t? ?i?ntask
(v¨ª d?:ReCaptchaV2TaskProxyless
).
V¨ª d? m? ho¨¤n ch?nh + Gi?i th¨ªch t?ng b??c
D??i ??y l¨¤ c¨¢c v¨ª d? ho¨¤n ch?nh ?? t¨ªch h?p CapSolver v?i BrowserStack b?ng Selenium, Playwright v¨¤ Puppeteer. M?i b¨¤i ki?m tra m?t trang web demo reCAPTCHA tr¨ºn nhi?u n?n t?ng.
?i?u ki?n ti¨ºn quy?t
- C¨¤i ??t c¨¢c ph? thu?c:
bash
pip install selenium playwright pyppeteer requests python-dotenv
- ??i v?i Playwright/Puppeteer:
bash
playwright install
- T?o t?p
.env
v?i c¨¢c bi?n sau:
CAPSOLVER_API_KEY
BROWSERSTACK_USERNAME
BROWSERSTACK_ACCESS_KEY
V¨ª d? Selenium
python
import time
import os
import requests
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from dotenv import load_dotenv
# Load bi?n m?i tr??ng
load_dotenv()
API_KEY = os.getenv("CAPSOLVER_API_KEY")
BROWSERSTACK_USERNAME = os.getenv("BROWSERSTACK_USERNAME")
BROWSERSTACK_ACCESS_KEY = os.getenv("BROWSERSTACK_ACCESS_KEY")
def solve_captcha(site_key, url):
"""T?o t¨¢c v? CapSolver v¨¤ ki?m tra m? th?ng b¨¢o gi?i ph¨¢p."""
create_task = {
"clientKey": API_KEY,
"task": {
"type": "ReCaptchaV2TaskProxyless",
"websiteURL": url,
"websiteKey": site_key,
}
}
print(f"T?o t¨¢c v? v?i API_KEY: {API_KEY[:10]}...")
print(f"Kh¨®a trang web: {site_key}")
print(f"URL: {url}")
resp = requests.post("https://api.capsolver.com/createTask", json=create_task)
print(f"Tr?ng th¨¢i ph?n h?i: {resp.status_code}")
print(f"V?n b?n ph?n h?i: {resp.text}")
resp.raise_for_status()
task_id = resp.json().get("taskId")
if not task_id:
raise RuntimeError("Kh?ng th? t?o t¨¢c v? CapSolver")
while True:
result = requests.post(
"https://api.capsolver.com/getTaskResult",
json={"clientKey": API_KEY, "taskId": task_id}
)
print(f"Tr?ng th¨¢i k?t qu? t¨¢c v?: {result.status_code}")
print(f"Ph?n h?i k?t qu? t¨¢c v?: {result.text}")
result.raise_for_status()
payload = result.json()
if payload.get("status") == "ready":
return payload["solution"]["gRecaptchaResponse"]
time.sleep(2)
def main():
if not BROWSERSTACK_USERNAME or not BROWSERSTACK_ACCESS_KEY:
raise SystemExit("Vui l¨°ng ??t bi?n m?i tr??ng BROWSERSTACK_USERNAME v¨¤ BROWSERSTACK_ACCESS_KEY")
# Kh? n?ng BrowserStack
bstack_options = {
"os": "Windows",
"osVersion": "11",
"buildName": "Ki?m tra Capsolver",
"sessionName": "Gi?i quy?t Captcha",
"local": "false",
"debug": "true",
"video": "true",
"networkLogs": "true",
}
options = Options()
options.set_capability("browserName", "Chrome")
options.set_capability("browserVersion", "latest")
options.set_capability("bstack:options", bstack_options)
hub_url = f"https://{BROWSERSTACK_USERNAME}:{BROWSERSTACK_ACCESS_KEY}@hub-cloud.browserstack.com/wd/hub"
driver = webdriver.Remote(command_executor=hub_url, options=options)
# In th?ng tin phi¨ºn ?? quan s¨¢t tr?c ti?p
print(f"ID phi¨ºn BrowserStack: {driver.session_id}")
print("Xem tr?c ti?p t?i: https://automate.browserstack.com/dashboard/v2/builds")
try:
url = "https://www.google.com/recaptcha/api2/demo"
driver.get(url)
site_key = driver.find_element(By.CLASS_NAME, "g-recaptcha").get_attribute("data-sitekey")
token = solve_captcha(site_key, url)
# L¨¤m cho v¨´ng v?n b?n ph?n h?i hi?n th? v¨¤ ??t m? th?ng b¨¢o
driver.execute_script('document.getElementById("g-recaptcha-response").style.display = "block";')
driver.execute_script(f'document.getElementById("g-recaptcha-response").value = "{token}";')
driver.find_element(By.ID, "recaptcha-demo-submit").click()
time.sleep(3) # Ch? trang t?i
# Ki?m tra trang sau khi g?i
print("=" * 50)
print("PH?N H?I TRANG SAU KHI G?I:")
print("=" * 50)
print(f"URL hi?n t?i: {driver.current_url}")
print(f"Ti¨ºu ?? trang: {driver.title}")
page_source = driver.page_source
print(f"?? d¨¤i ngu?n trang: {len(page_source)} k? t?")
# Ki?m tra xem c¨® ch? b¨¢o th¨¤nh c?ng hay l?i kh?ng
if any(word in page_source.lower() for word in ['success', 'verificado', 'genial', 'hooray']):
print("? T¨¬m th?y ch? b¨¢o TH?NH C?NG trong trang!")
if "error" in page_source.lower():
print("? T¨¬m th?y ch? b¨¢o L?I trong trang!")
if "captcha" in page_source.lower():
print("? CAPTCHA v?n c¨°n trong trang")
# Xem tr??c 500 k? t? ??u ti¨ºn c?a v?n b?n n?i dung
try:
body = driver.find_element(By.TAG_NAME, "body")
print(f"Xem tr??c v?n b?n n?i dung:\n{body.text[:500]}")
except Exception:
print("Kh?ng th? tr¨ªch xu?t v?n b?n n?i dung")
print("=" * 50)
time.sleep(2)
finally:
driver.quit()
if __name__ == "__main__":
main()
B??c | M? t? |
---|---|
1. Load Dependencies and Env | Nh?p th? vi?n v¨¤ t?i kh¨®a API t? .env . |
2. Define solve_captcha | T?o v¨¤ ki?m tra t¨¢c v? CapSolver ?? l?y m? th?ng b¨¢o gi?i ph¨¢p reCAPTCHA v2. |
3. Configure BrowserStack | ??t kh? n?ng cho WebDriver t? xa (v¨ª d?: Windows/Chrome). |
4. Navigate and Solve | ?i ??n trang demo, tr¨ªch xu?t kh¨®a trang web, gi?i quy?t CAPTCHA, ti¨ºm m? th?ng b¨¢o. |
5. Submit and Verify | Nh?p v¨¤o g?i, ch? v¨¤ ki?m tra c¨¢c ch? b¨¢o th¨¤nh c?ng trong ph?n h?i. |
6. Clean Up | Tho¨¢t tr¨¬nh ?i?u khi?n ?? ?¨®ng phi¨ºn. |
V¨ª d? Playwright (Async)
python
import time
import os
import requests
import asyncio
import json
from playwright.async_api import async_playwright
from dotenv import load_dotenv
# Load bi?n m?i tr??ng
load_dotenv()
API_KEY = os.getenv("CAPSOLVER_API_KEY")
BROWSERSTACK_USERNAME = os.getenv("BROWSERSTACK_USERNAME")
BROWSERSTACK_ACCESS_KEY = os.getenv("BROWSERSTACK_ACCESS_KEY")
def solve_captcha(site_key, url):
"""
T?o t¨¢c v? CapSolver v¨¤ ki?m tra m? th?ng b¨¢o gi?i ph¨¢p.
Ho?t ??ng gi?ng nh? v¨ª d? Selenium.
"""
create_task = {
"clientKey": API_KEY,
"task": {
"type": "ReCaptchaV2TaskProxyless",
"websiteURL": url,
"websiteKey": site_key,
}
}
print(f"T?o t¨¢c v? v?i API_KEY: {API_KEY[:10]}...")
print(f"Kh¨®a trang web: {site_key}")
print(f"URL: {url}")
resp = requests.post("https://api.capsolver.com/createTask", json=create_task)
print(f"Tr?ng th¨¢i ph?n h?i: {resp.status_code}")
print(f"V?n b?n ph?n h?i: {resp.text}")
resp.raise_for_status()
task_id = resp.json().get("taskId")
if not task_id:
raise RuntimeError("Kh?ng th? t?o t¨¢c v? CapSolver")
# Ki?m tra cho ??n khi gi?i ph¨¢p s?n s¨¤ng
while True:
result = requests.post(
"https://api.capsolver.com/getTaskResult",
json={"clientKey": API_KEY, "taskId": task_id}
)
result.raise_for_status()
payload = result.json()
if payload.get("status") == "ready":
return payload["solution"]["gRecaptchaResponse"]
time.sleep(2)
async def run_captcha_test(platform_config):
"""Ch?y ki?m tra captcha tr¨ºn c?u h¨¬nh n?n t?ng c? th? th?ng qua BrowserStack."""
print(f"\n? Ki?m tra tr¨ºn: {platform_config['name']}")
async with async_playwright() as playwright:
# K?t n?i v?i BrowserStack b?ng ?i?m cu?i CDP
ws_endpoint = f"wss://cdp.browserstack.com/playwright?caps={platform_config['caps_string']}"
try:
browser = await playwright.chromium.connect_over_cdp(ws_endpoint)
context = await browser.new_context(viewport={'width': 1280, 'height': 720})
page = await context.new_page()
print(f"? ?? k?t n?i v?i BrowserStack")
print("? Xem tr?c ti?p t?i: https://automate.browserstack.com/dashboard/v2/builds")
# ?i?u h??ng ??n trang demo reCAPTCHA
url = "https://www.google.com/recaptcha/api2/demo"
await page.goto(url, wait_until="domcontentloaded", timeout=30000)
await page.wait_for_selector(".g-recaptcha", timeout=20000)
site_key = await page.get_attribute(".g-recaptcha", "data-sitekey")
print(f"? T¨¬m th?y kh¨®a trang web: {site_key}")
print("\n? Gi?i quy?t captcha b?ng CapSolver...")
token = solve_captcha(site_key, url)
print(f"? ?? l?y m? th?ng b¨¢o captcha: {token[:50]}...")
# Ti¨ºm m? th?ng b¨¢o v¨¤ g?i bi?u m?u
await page.evaluate('document.getElementById("g-recaptcha-response").style.display = "block";')
await page.evaluate(f'document.getElementById("g-recaptcha-response").value = "{token}";')
await page.click("#recaptcha-demo-submit")
await page.wait_for_timeout(5000)
vi
#!/usr/bin/env python3
import time
import os
import requests
import asyncio
import json
import urllib.parse
from pyppeteer import connect
from dotenv import load_dotenv
# Load environment variables
load_dotenv()
API_KEY = os.getenv("CAPSOLVER_API_KEY")
BROWSERSTACK_USERNAME = os.getenv("BROWSERSTACK_USERNAME")
BROWSERSTACK_ACCESS_KEY = os.getenv("BROWSERSTACK_ACCESS_KEY")
def solve_captcha(site_key, url):
"""
Create a CapSolver task and poll for a solution token.
"""
create_task = {
"clientKey": API_KEY,
"task": {
"type": "ReCaptchaV2TaskProxyless",
"websiteURL": url,
"websiteKey": site_key,
}
}
print(f"Creating task with API_KEY: {API_KEY[:10]}...")
print(f"Site key: {site_key}")
print(f"URL: {url}")
resp = requests.post("https://api.capsolver.com/createTask", json=create_task)
print(f"Response status: {resp.status_code}")
print(f"Response text: {resp.text}")
resp.raise_for_status()
task_id = resp.json().get("taskId")
if not task_id:
raise RuntimeError("Failed to create CapSolver task")
# Poll until solution is ready
while True:
result = requests.post(
"https://api.capsolver.com/getTaskResult",
json={"clientKey": API_KEY, "taskId": task_id}
)
print(f"Task result status: {result.status_code}")
print(f"Task result response: {result.text}")
result.raise_for_status()
payload = result.json()
if payload.get("status") == "ready":
return payload["solution"]["gRecaptchaResponse"]
time.sleep(2)
async def run_captcha_test(platform_config):
"""Run captcha test on a specific platform configuration."""
print(f"\n? Testing on: {platform_config['name']}")
print(f"Platform details: {platform_config}")
try:
# Create BrowserStack WebSocket endpoint for Puppeteer
ws_endpoint = f"wss://cdp.browserstack.com/puppeteer?caps={platform_config['caps_string']}"
# Connect to BrowserStack using Puppeteer CDP
browser = await connect(
browserWSEndpoint=ws_endpoint,
ignoreHTTPSErrors=True,
args=['--no-sandbox', '--disable-setuid-sandbox']
)
# Create new page
page = await browser.newPage()
await page.setViewport({'width': 1280, 'height': 720})
print(f"? Connected to BrowserStack via Puppeteer")
print(f"? Watch live at: https://automate.browserstack.com/dashboard/v2/builds")
# Navigate to reCAPTCHA demo
url = "https://www.google.com/recaptcha/api2/demo"
await page.goto(url, {'waitUntil': 'domcontentloaded', 'timeout': 30000})
print(f"? Navigated to: {url}")
# Wait for page to load and find site key
await page.waitForSelector(".g-recaptcha", {'timeout': 20000})
site_key_element = await page.querySelector(".g-recaptcha")
site_key = await page.evaluate('(element) => element.getAttribute("data-sitekey")', site_key_element)
print(f"? Found site key: {site_key}")
# Solve captcha using CapSolver
print("\n? Solving captcha with CapSolver...")
token = solve_captcha(site_key, url)
print(f"? Got captcha token: {token[:50]}...")
# Inject the captcha solution
print("\n? Injecting captcha solution...")
await page.evaluate('document.getElementById("g-recaptcha-response").style.display = "block";')
await page.evaluate(f'document.getElementById("g-recaptcha-response").value = "{token}";')
# Submit the form
print("? Submitting form...")
await page.click("#recaptcha-demo-submit")
# Wait for response
print("? Waiting for response...")
await asyncio.sleep(5)
# Get results
current_url = page.url
page_title = await page.title()
body_text = await page.evaluate('() => document.body.textContent')
# Check for success indicators
success_indicators = ['success', 'verificado', 'genial', 'hooray']
is_success = any(word in body_text.lower() for word in success_indicators)
has_error = 'error' in body_text.lower()
has_captcha = 'captcha' in body_text.lower()
# Display results
print("\n" + "=" * 60)
print(f"? RESULTS FOR {platform_config['name']}:")
print("=" * 60)
print(f"? Current URL: {current_url}")
print(f"? Page Title: {page_title}")
print(f"? Timestamp: {time.strftime('%Y-%m-%d %H:%M:%S')}")
print(f"? Success: {'? YES' if is_success else '? NO'}")
if has_error:
print("? ERROR indicator found in page!")
if has_captcha:
print("? CAPTCHA still present in page")
print(f"\n? Page Response Preview:")
print("-" * 40)
print(body_text[:500])
print("=" * 60)
if is_success:
print(f"\n? SUCCESS! Captcha solved on {platform_config['name']}!")
else:
print(f"\n?? Something went wrong on {platform_config['name']}.")
# Wait a bit to observe results
await asyncio.sleep(3)
# Mark test status in BrowserStack
try:
status = "passed" if is_success else "failed"
reason = f"Captcha solved successfully on {page_title}" if is_success else "Captcha solving failed"
await page.evaluate(f'''
browserstack_executor: {{
"action": "setSessionStatus",
"arguments": {{
"status": "{status}",
"reason": "{reason}"
}}
}}
''')
except Exception as e:
print(f"Warning: Could not set BrowserStack status: {e}")
return {'platform': platform_config['name'], 'success': is_success, 'url': current_url, 'title': page_title}
except Exception as e:
print(f"? Error on {platform_config['name']}: {str(e)}")
return {'platform': platform_config['name'], 'success': False, 'error': str(e)}
finally:
try:
if 'browser' in locals():
await browser.close()
except Exception as e:
print(f"Warning: Error closing browser: {e}")
pass
def create_browserstack_caps(platform):
"""Create BrowserStack capabilities for Puppeteer."""
caps = {
'browserstack.username': BROWSERSTACK_USERNAME,
'browserstack.accessKey': BROWSERSTACK_ACCESS_KEY,
'project': 'Puppeteer Capsolver Test',
'build': 'Captcha Solve Demo - Puppeteer',
'name': f"Captcha Test - {platform.get('browserName', 'chrome')} (Puppeteer)",
'browserstack.debug': 'true',
'browserstack.console': 'info',
'browserstack.networkLogs': 'true',
'browserstack.timezone': 'UTC'
}
# Add platform-specific capabilities
if 'os' in platform:
caps['os'] = platform['os']
caps['os_version'] = platform['osVersion']
caps['browser'] = platform['browserName']
caps['browser_version'] = platform['browserVersion']
elif 'deviceName' in platform:
caps['device'] = platform['deviceName']
caps['os_version'] = platform['osVersion']
caps['browser'] = platform['browserName']
caps['real_mobile'] = 'true'
# Convert to URL-encoded JSON string
caps_json = json.dumps(caps)
caps_string = urllib.parse.quote(caps_json)
return caps, caps_string
async def main():
"""Main function to run tests on multiple platforms."""
if not API_KEY or API_KEY == "YOUR_CAPSOLVER_API_KEY":
raise SystemExit("Please set CAPSOLVER_API_KEY environment variable")
# Define platforms to test
platforms = [
{'name': 'Windows 11 - Chrome (Puppeteer)', 'os': 'Windows', 'osVersion': '11', 'browserName': 'chrome', 'browserVersion': 'latest'},
{'name': 'macOS Ventura - Chrome (Puppeteer)', 'os': 'OS X', 'osVersion': 'Ventura', 'browserName': 'chrome', 'browserVersion': 'latest'},
{'name': 'Samsung Galaxy S23 Ultra - Chrome (Puppeteer)', 'deviceName': 'Samsung Galaxy S23 Ultra', 'browserName': 'chrome', 'osVersion': '13.0'}
]
print("? Starting Puppeteer + BrowserStack + CapSolver Demo...")
print(f"? Testing on {len(platforms)} different platforms:")
for i, platform in enumerate(platforms, 1):
print(f" {i}. {platform['name']}")
results = []
# Test each platform
for platform in platforms:
try:
caps, caps_string = create_browserstack_caps(platform)
platform['caps'] = caps
platform['caps_string'] = caps_string
result = await run_captcha_test(platform)
results.append(result)
await asyncio.sleep(2)
except Exception as e:
print(f"? Failed to test {platform['name']}: {str(e)}")
results.append({'platform': platform['name'], 'success': False, 'error': str(e)})
# Final summary
print("\n" + "?"*60)
print("FINAL SUMMARY - ALL PLATFORMS (PUPPETEER)")
print("?"*60)
successful_platforms = [r['platform'] for r in results if r['success']]
failed_platforms = [r['platform'] for r in results if not r['success']]
for r in results:
if r['success']:
print(f"? {r['platform']}: SUCCESS")
else:
print(f"? {r['platform']}: FAILED - {r.get('error', 'Unknown error')}")
print(f"\n? Success Rate: {len(successful_platforms)}/{len(results)} platforms")
print(f"? Test completed at: {time.strftime('%Y-%m-%d %H:%M:%S')}")
if successful_platforms:
print(f"\n? Successful platforms: {', '.join(successful_platforms)}")
if failed_platforms:
print(f"\n?? Failed platforms: {', '.join(failed_platforms)}")
print("?"*60)
if __name__ == "__main__":
asyncio.run(main())
vi
print(f"? B¨¤i ki?m tra ho¨¤n t?t l¨²c: {time.strftime('%Y-%m-%d %H:%M:%S')}")
if successful_platforms:
print(f"\n? N?n t?ng th¨¤nh c?ng: {', '.join(successful_platforms)}")
if failed_platforms:
print(f"\n?? N?n t?ng th?t b?i: {', '.join(failed_platforms)}")
print("?"*60)
print("\n? L?u ?: B?n demo n¨¤y s? d?ng pyppeteer (Python Puppeteer) v?i BrowserStack")
print(" ?? c¨® k?t qu? t?t nh?t, h?y ??m b?o g¨®i BrowserStack c?a b?n h? tr? k?t n?i CDP")
if __name__ == "__main__":
asyncio.run(main())
Tuy¨ºn b? Tu?n th?: Th?ng tin ???c cung c?p tr¨ºn blog n¨¤y ch? mang t¨ªnh ch?t tham kh?o. CapSolver cam k?t tu?n th? t?t c? c¨¢c lu?t v¨¤ quy ??nh hi?n h¨¤nh. Vi?c s? d?ng m?ng l??i CapSolver cho c¨¢c ho?t ??ng b?t h?p ph¨¢p, gian l?n ho?c l?m d?ng l¨¤ ho¨¤n to¨¤n b? c?m v¨¤ s? b? ?i?u tra. C¨¢c gi?i ph¨¢p gi?i captcha c?a ch¨²ng t?i n?ng cao tr?i nghi?m ng??i d¨´ng trong khi ??m b?o tu?n th? 100% trong vi?c gi¨²p gi?i quy?t c¨¢c kh¨® kh?n v? captcha trong qu¨¢ tr¨¬nh thu th?p d? li?u c?ng khai. Ch¨²ng t?i khuy?n kh¨ªch vi?c s? d?ng d?ch v? c?a ch¨²ng t?i m?t c¨¢ch c¨® tr¨¢ch nhi?m. ?? bi?t th¨ºm th?ng tin, vui l¨°ng truy c?p ?i?u kho?n D?ch v? v¨¤ Ch¨ªnh s¨¢ch Quy?n ri¨ºng t?.
Th¨ºm

L¨¤m th? n¨¤o ?? gi?i quy?t m?i phi¨ºn b?n c?a reCAPTCHA Enterprise v2, v2 v? h¨¬nh, v3, v3 Enterprise ?i?m 0.9
N?m v?ng c¨¢ch gi?i quy?t m?i phi¨ºn b?n reCaptcha v?i CapSolver: H??ng d?n n¨¤y cung c?p h??ng d?n t?ng b??c ?? gi?i quy?t reCaptcha m?t c¨¢ch hi?u qu?, ??m b?o k?t qu? ch¨ªnh x¨¢c m?i l?n.

Anh Tuan
11-Oct-2025

L¨¤m th? n¨¤o ?? gi?i CAPTCHA h¨¬nh ?nh
B¨¤i vi?t n¨¤y cung c?p m?t h??ng d?n to¨¤n di?n v? c¨¢ch gi?i captcha h¨¬nh ?nh b?ng CapSolver, m?t c?ng c? ???c thi?t k? ?? t? ??ng h¨®a quy tr¨¬nh. N¨® b?t ??u b?ng vi?c gi?i th¨ªch v? kh¨¢i ni?m captcha h¨¬nh ?nh, sau ?¨® l¨¤ m?t h??ng d?n chi ti?t t?ng b??c v? c¨¢ch s? d?ng API c?a CapSolver ?? gi?i c¨¢c captcha n¨¤y. H??ng d?n bao g?m c¨¢c v¨ª d? v? c¨¢c y¨ºu c?u v¨¤ ph?n h?i li¨ºn quan ??n quy tr¨¬nh. B¨¤i vi?t k?t th¨²c b?ng m?t nh?n x¨¦t v? hi?u qu? v¨¤ ti?n l?i khi s? d?ng CapSolver ?? gi?i captcha h¨¬nh ?nh, l¨¤m cho n¨® tr? th¨¤nh m?t ngu?n t¨¤i nguy¨ºn qu? gi¨¢ cho nh?ng ng??i mu?n t? ??ng h¨®a c¨¢c nhi?m v? li¨ºn quan ??n vi?c gi?i captcha.

Anh Tuan
11-Oct-2025

Gi?i reCaptcha v2 Enterprise
Trong th? gi?i s?, an ninh v¨¤ s? ti?n l?i cho ng??i d¨´ng th??ng ? hai ??u m¨²t ??i l?p c?a thang ?o. CAPTCHAs, ??c bi?t l¨¤ reCaptcha, ?? ?¨®ng vai tr¨° thi?t y?u trong vi?c t¨¬m ra s? c?n b?ng gi?a hai y?u t? n¨¤y. Tuy nhi¨ºn, n?u b?n c?n gi?i quy?t c¨¢c b¨¤i ki?m tra reCaptcha th??ng ph?c t?p v¨¤ t?n th?i gian, ??c bi?t l¨¤ reCaptcha V2 Enterprise, v¨¬ m?t m?c ?¨ªch h?p ph¨¢p nh? ki?m th? t? ??ng th¨¬ sao? Trong b¨¤i vi?t n¨¤y, ch¨²ng t?i s? h??ng d?n b?n qua quy tr¨¬nh gi?i reCaptcha V2 Enterprise b?ng API c?a CapSolver.

Anh Tuan
11-Oct-2025

Gi?i reCaptcha v3
H?c c¨¢ch gi?i reCaptcha V3 b?ng CapSolver: nhi?u lo?i nhi?m v?, t¨ªch h?p API ??n gi?n v¨¤ c¨¢c gi?i ph¨¢p hi?u qu? cho t? ??ng h¨®a v¨¤ ki?m th?

Anh Tuan
10-Oct-2025

C¨¢i n¨¤o l¨¤ gi?i ph¨¢p AWS WAF t?t nh?t trong khi qu¨¦t web v¨¤o n?m 2025?
H?c c¨¢ch gi?i quy?t CAPTCHA AWS WAF hi?u qu? b?ng CapSolver v¨¤o n?m 2025. H??ng d?n t?ng b??c, t¨ªch h?p Python, c?ng c? AI ?? t?ng t?c quy tr¨¬nh t? ??ng h¨®a c?a b?n. V??t qua c¨¢c token ??ng, ph?n t¨ªch h¨¤nh vi v¨¤ c¨¢c th¨¢ch th?c CAPTCHA ph?c t?p m?t c¨¢ch d? d¨¤ng.

Lucas Mitchell
26-Sep-2025

C¨¢ch gi?i quy?t reCaptcha v3 Enterprise
H?c c¨¢ch gi?i quy?t reCAPTCHA v3 Enterprise m?t c¨¢ch d? d¨¤ng b?ng Capsolver: ch¨¬a kh¨®a c?a b?n ?? v??t qua CAPTCHA ph?c t?p v?i ph?n t¨ªch r?i ro n?ng cao v¨¤ t¨ªch h?p li?n m?ch

Anh Tuan
24-Sep-2025