CAPSOLVER
Blog
Cách tích hợp Camoufox với CapSolver để giải CAPTCHA mượt mà

Cách tích hợp Camoufox với CapSolver để giải CAPTCHA một cách liền mạch

Logo of CapSolver

Anh Tuan

Data Science Expert

16-Dec-2025

TL;DR: Sử dụng Camoufox để tránh phát hiện dấu vân tay trình duyệt và CapSolver để giải CAPTCHA tự động như Cloudflare Turnstile và reCAPTCHA v2/v3. Cùng nhau, chúng tạo ra tự động hóa web ổn định, giống người dùng, ở quy mô lớn với tỷ lệ phát hiện thấp và tỷ lệ thành công cao.

Giới thiệu

Tự động hóa web đã trở thành thiết yếu cho thu thập dữ liệu, kiểm thử và nhiều hoạt động kinh doanh khác. Tuy nhiên, các trang web hiện đại triển khai các biện pháp chống bot tinh vi và CAPTCHA có thể làm dừng các tập lệnh tự động hóa được thiết kế cẩn thận nhất.

Kết hợp giữa CamoufoxCapSolver cung cấp giải pháp mạnh mẽ cho thách thức này:

  • Camoufox: Trình duyệt chống phát hiện mã nguồn mở dựa trên Firefox, tránh phát hiện bot bằng cách giả mạo dấu vân tay trình duyệt ở cấp độ nâng cao
  • CapSolver: Dịch vụ giải CAPTCHA dựa trên AI, xử lý Cloudflare Turnstile, reCAPTCHA và nhiều loại khác

Cùng nhau, các công cụ này cho phép tự động hóa web liền mạch, vượt qua cả phát hiện dấu vân tay và thách thức CAPTCHA.

Mục tiêu tích hợp

Hướng dẫn này sẽ giúp bạn đạt được ba mục tiêu cốt lõi:

  1. Tránh phát hiện bot - Sử dụng tiêm dấu vân tay của Camoufox để xuất hiện như một trình duyệt hợp lệ
  2. Giải CAPTCHA tự động - Tích hợp API của CapSolver để xử lý các thách thức CAPTCHA mà không cần can thiệp thủ công
  3. Duy trì hành vi giống người dùng - Kết hợp chuyển động chuột nhân tạo với giải CAPTCHA thông minh

Camoufox là gì?

Camoufox là phiên bản Firefox tùy chỉnh tinh vi, tối giản được thiết kế đặc biệt cho việc quét web và tự động hóa. Khác với các giải pháp chống phát hiện khác dựa trên tiêm JavaScript (có thể bị phát hiện), Camoufox thực hiện giả mạo dấu vân tay ở cấp độ C++ trong chính trình duyệt.

Tính năng chính

  • Tiêm dấu vân tay - Giả mạo các thuộc tính trình duyệt, kích thước màn hình, WebGL, WebRTC, phông chữ và nhiều hơn nữa ở cấp độ hệ thống
  • Chuyển động chuột giống người - Thuật toán nhân tạo con trỏ để tương tác thực tế
  • Tích hợp BrowserForge - Tạo dấu vân tay mô phỏng phân phối thiết bị thực tế
  • Hỗ trợ GeoIP - Tự động tính toán múi giờ, ngôn ngữ và vị trí địa lý dựa trên IP proxy
  • Hỗ trợ tiện ích mở rộng Firefox - Tải tiện ích mở rộng tùy chỉnh bao gồm trình chặn quảng cáo

Cài đặt

bash Copy
# Cài đặt gói Python
pip install -U camoufox[geoip]

# Tải trình duyệt Camoufox
camoufox fetch

Cách sử dụng cơ bản

python Copy
from camoufox.sync_api import Camoufox

with Camoufox(humanize=True) as browser:
    page = browser.new_page()
    page.goto("https://example.com")

CapSolver là gì?

CapSolver là dịch vụ giải CAPTCHA tự động dựa trên AI hỗ trợ nhiều loại CAPTCHA. Nó cung cấp API đơn giản cho phép bạn gửi các thách thức CAPTCHA và nhận giải pháp trong vài giây.

Các loại CAPTCHA được hỗ trợ

  • Cloudflare Turnstile - Thách thức chống bot phổ biến nhất hiện nay
  • reCAPTCHA v2 - Các biến thể dựa trên hình ảnh và ẩn
  • reCAPTCHA v3 - Xác minh dựa trên điểm số
  • AWS WAF - CAPTCHA của Amazon Web Services
  • Và nhiều hơn nữa...

Bắt đầu với CapSolver

  1. Đăng ký tại capsolver.com
  2. Nạp tiền vào tài khoản
  3. Lấy khóa API từ bảng điều khiển

Gợi ý thêm: Sử dụng mã CAMOUFOX khi đăng ký để nhận thêm tín dụng!


Thách thức trước khi tích hợp

Trước khi kết hợp Camoufox với CapSolver, tự động hóa web gặp phải nhiều vấn đề:

Thách thức Tác động
Phát hiện dấu vân tay trình duyệt Tập lệnh bị chặn trước khi truy cập nội dung
Thách thức CAPTCHA Yêu cầu giải thủ công, phá vỡ quy trình tự động hóa
Hệ thống danh tiếng IP Proxy nhanh chóng bị gán nhãn và cấm
Phân tích hành vi Mẫu hành vi không giống người dùng được phát hiện

Tích hợp Camoufox + CapSolver giải quyết tất cả các thách thức này trong một quy trình duy nhất.


Phương pháp tích hợp

Phương pháp 1: Tích hợp API (Được khuyến khích)

Phương pháp tích hợp API cung cấp kiểm soát toàn diện quá trình giải CAPTCHA và hoạt động với mọi loại CAPTCHA.

Yêu cầu cài đặt

bash Copy
pip install camoufox[geoip] httpx

Mẫu tích hợp chính

python Copy
import asyncio
import httpx
from camoufox.async_api import AsyncCamoufox

CAPSOLVER_API_KEY = "KHÓA_API_CỦA_BẠN"
CAPSOLVER_API = "https://api.capsolver.com"


async def create_task(task_payload: dict) -> str:
    """Tạo nhiệm vụ giải CAPTCHA và trả về ID nhiệm vụ."""
    async with httpx.AsyncClient() as client:
        response = await client.post(
            f"{CAPSOLVER_API}/createTask",
            json={
                "clientKey": CAPSOLVER_API_KEY,
                "task": task_payload
            }
        )
        result = response.json()
        if result.get("errorId") != 0:
            raise Exception(f"Lỗi CapSolver: {result.get('errorDescription')}")
        return result["taskId"]


async def get_task_result(task_id: str, max_attempts: int = 120) -> dict:
    """Kiểm tra kết quả nhiệm vụ cho đến khi giải được hoặc hết thời gian."""
    async with httpx.AsyncClient() as client:
        for _ in range(max_attempts):
            response = await client.post(
                f"{CAPSOLVER_API}/getTaskResult",
                json={
                    "clientKey": CAPSOLVER_API_KEY,
                    "taskId": task_id
                }
            )
            result = response.json()

            if result.get("status") == "ready":
                return result["solution"]
            elif result.get("status") == "failed":
                raise Exception(f"Thất bại: {result.get('errorDescription')}")

            await asyncio.sleep(1)

    raise TimeoutError("Giải CAPTCHA hết thời gian!")


async def solve_captcha(task_payload: dict) -> dict:
    """Hoàn tất quy trình giải CAPTCHA."""
    task_id = await create_task(task_payload)
    return await get_task_result(task_id)

Phương pháp 2: Mở rộng trình duyệt

Bạn cũng có thể sử dụng mở rộng CapSolver với Camoufox để tiếp cận dễ dàng hơn.

Các bước cài đặt

  1. Tải mở rộng CapSolver từ capsolver.com/en/extension
  2. Giải nén tệp mở rộng
  3. Tải nó vào Camoufox:
python Copy
from camoufox.sync_api import Camoufox

with Camoufox(
    addons=["/đường_dẫn/tới/mở_rộng_capsolver"],
    headless=False  # Mở rộng yêu cầu chế độ có giao diện
) as browser:
    page = browser.new_page()
    # Mở rộng sẽ tự động phát hiện và giải CAPTCHA

Ví dụ mã

Ví dụ 1: Giải Cloudflare Turnstile

Cloudflare Turnstile là một trong những thách thức CAPTCHA phổ biến nhất. Dưới đây là cách giải nó:

python Copy
import asyncio
from camoufox.async_api import AsyncCamoufox

CAPSOLVER_API_KEY = "KHÓA_API_CỦA_BẠN"
CAPSOLVER_API = "https://api.capsolver.com"


async def solve_turnstile(site_key: str, page_url: str) -> str:
    """Giải Cloudflare Turnstile và trả về token."""
    import httpx

    async with httpx.AsyncClient() as client:
        # Tạo nhiệm vụ
        response = await client.post(
            f"{CAPSOLVER_API}/createTask",
            json={
                "clientKey": CAPSOLVER_API_KEY,
                "task": {
                    "type": "AntiTurnstileTaskProxyLess",
                    "websiteURL": page_url,
                    "websiteKey": site_key,
                }
            }
        )
        task_id = response.json()["taskId"]

        # Kiểm tra kết quả
        while True:
            result = await client.post(
                f"{CAPSOLVER_API}/getTaskResult",
                json={
                    "clientKey": CAPSOLVER_API_KEY,
                    "taskId": task_id
                }
            )
            data = result.json()

            if data.get("status") == "ready":
                return data["solution"]["token"]

            await asyncio.sleep(1)


async def main():
    target_url = "https://example.com/trang-bảo-mật"
    turnstile_site_key = "0x4XXXXXXXXXXXXXXXXX"  # Tìm trong mã nguồn trang

    async with AsyncCamoufox(
        humanize=True,
        headless=False,
        os="windows"
    ) as browser:
        page = await browser.new_page()
        await page.goto(target_url)

        # Chờ Turnstile tải xong
        await page.wait_for_selector('input[name="cf-turnstile-response"]', timeout=10000)

        # Giải CAPTCHA
        token = await solve_turnstile(turnstile_site_key, target_url)
        print(f"Nhận được token Turnstile: {token[:50]}...")

        # Chèn token
        await page.evaluate(f'''
            document.querySelector('input[name="cf-turnstile-response"]').value = "{token}";

            // Cập nhật callback ẩn nếu có
            const callback = document.querySelector('[data-callback]');
            if (callback) {{
                const callbackName = callback.getAttribute('data-callback');
                if (window[callbackName]) {{
                    window[callbackName]('{token}');
                }}
            }}
        ''')

        # Gửi biểu mẫu
        await page.click('button[type="submit"]')
        await page.wait_for_load_state("networkidle")

        print("Đã vượt qua Turnstile thành công!")


if __name__ == "__main__":
    asyncio.run(main())

Ví dụ 2: Giải reCAPTCHA v2

python Copy
import asyncio
from camoufox.async_api import AsyncCamoufox

CAPSOLVER_API_KEY = "KHÓA_API_CỦA_BẠN"
CAPSOLVER_API = "https://api.capsolver.com"


async def solve_recaptcha_v2(site_key: str, page_url: str) -> str:
    """Giải reCAPTCHA v2 và trả về token."""
    import httpx

    async with httpx.AsyncClient() as client:
        # Tạo nhiệm vụ
        response = await client.post(
            f"{CAPSOLVER_API}/createTask",
            json={
                "clientKey": CAPSOLVER_API_KEY,
                "task": {
                    "type": "ReCaptchaV2TaskProxyLess",
                    "websiteURL": page_url,
                    "websiteKey": site_key,
                }
            }
        )
        result = response.json()

        if result.get("errorId") != 0:
            raise Exception(f"Lỗi: {result.get('errorDescription')}")

        task_id = result["taskId"]

        # Kiểm tra kết quả
        while True:
            result = await client.post(
                f"{CAPSOLVER_API}/getTaskResult",
                json={
                    "clientKey": CAPSOLVER_API_KEY,
                    "taskId": task_id
                }
            )
            data = result.json()

            if data.get("status") == "ready":
                return data["solution"]["gRecaptchaResponse"]
            elif data.get("status") == "failed":
                raise Exception(f"Thất bại: {data.get('errorDescription')}")

            await asyncio.sleep(2)


async def main():
    target_url = "https://example.com/đăng-nhập"
    recaptcha_site_key = "6LcXXXXXXXXXXXXXXXXXXXXXXXXX"  # Tìm trong mã nguồn trang

    async with AsyncCamoufox(
        humanize=True,
        headless=False,
        os=["windows", "macos"]  # Chọn ngẫu nhiên hệ điều hành
    ) as browser:
        page = await browser.new_page()
        await page.goto(target_url)

        # Điền các trường biểu mẫu với khoảng thời gian giống người dùng
        await page.fill('input[name="username"]', "[email protected]")
        await asyncio.sleep(0.5)  # Nghỉ ngơi giống người dùng
        await page.fill('input[name="password"]', "password123")

        # Giải CAPTCHA
        print("Giải reCAPTCHA v2...")
        token = await solve_recaptcha_v2(recaptcha_site_key, target_url)
        print(f"Nhận được token: {token[:50]}...")

        # Chèn token vào trường phản hồi reCAPTCHA
        await page.evaluate(f'''
            document.getElementById('g-recaptcha-response').innerHTML = '{token}';
            document.getElementById('g-recaptcha-response').style.display = 'block';
        ''')

        # Gửi biểu mẫu
        await page.click('button[type="submit"]')
        await page.wait_for_load_state("networkidle")

        print("Đăng nhập thành công!")


if __name__ == "__main__":
    asyncio.run(main())

Ví dụ 3: Giải reCAPTCHA v3

reCAPTCHA v3 dựa trên điểm số và không yêu cầu tương tác người dùng. Bạn cần chỉ định tham số hành động.

python Copy
import asyncio
from camoufox.async_api import AsyncCamoufox

CAPSOLVER_API_KEY = "KHÓA_API_CỦA_BẠN"
CAPSOLVER_API = "https://api.capsolver.com"


async def solve_recaptcha_v3(
    site_key: str,
    page_url: str,
    action: str = "verify",
    min_score: float = 0.7
) -> str:
    """Giải reCAPTCHA v3 với hành động và điểm số tối thiểu được chỉ định."""
    import httpx

    async with httpx.AsyncClient() as client:
        response = await client.post(
            f"{CAPSOLVER_API}/createTask",
            json={
                "clientKey": CAPSOLVER_API_KEY,
                "task": {
                    "type": "ReCaptchaV3TaskProxyLess",
                    "websiteURL": page_url,
                    "websiteKey": site_key,
                    "pageAction": action,
                    "minScore": min_score
                }
            }
        )
        result = response.json()

        if result.get("errorId") != 0:
            raise Exception(f"Lỗi: {result.get('errorDescription')}")

        task_id = result["taskId"]

        while True:
            result = await client.post(
                f"{CAPSOLVER_API}/getTaskResult",
                json={
                    "clientKey": CAPSOLVER_API_KEY,
                    "taskId": task_id
                }
            )
            data = result.json()

            if data.get("status") == "ready":
                return data["solution"]["gRecaptchaResponse"]
            elif data.get("status") == "failed":
                raise Exception(f"Thất bại: {data.get('errorDescription')}")

            await asyncio.sleep(1)


async def main():
    target_url = "https://example.com/tim-kiem"
    recaptcha_v3_key = "6LcXXXXXXXXXXXXXXXXXXXXXXXXX"

    async with AsyncCamoufox(
        humanize=2.0,  # Chuyển động chuột tối đa 2 giây
        headless=True,  # Chạy không giao diện cho v3
        geoip=True,  # Phát hiện tự động vị trí từ proxy
    ) as browser:
        page = await browser.new_page()
        await page.goto(target_url)

        # Giải reCAPTCHA v3 với hành động "tim-kiem"
        print("Giải reCAPTCHA v3...")
        token = await solve_recaptcha_v3(
            recaptcha_v3_key,
            target_url,
            action="tim-kiem",
            min_score=0.9  # Yêu cầu điểm số cao
        )

        # Gọi hàm callback với token
        await page.evaluate(f'''
            // Gửi token qua hàm callback của trang

grecaptcha.execute('{recaptcha_v3_key}', {{action: 'search'}})
.then(function(originalToken) {{
// Thay thế bằng token đã giải
submitSearch('{token}');
}});
''')

Copy
    print("Bypass reCAPTCHA v3 thành công!")

if name == "main":
asyncio.run(main())

Copy
---

## Các Nguyên Tắc Tốt

### 1. Quay vòng proxy với GeoIP

Sử dụng tính năng GeoIP của Camoufox để tự động khớp dấu vân tay với vị trí proxy của bạn:

```python
async with AsyncCamoufox(
    geoip=True,  # Tự động phát hiện từ IP proxy
    proxy={
        "server": "http://proxy.example.com:8080",
        "username": "user",
        "password": "pass"
    }
) as browser:
    # Dấu vân tay sẽ khớp với vị trí địa lý của proxy
    pass

2. Tính nhất quán của dấu vân tay

Giữ dấu vân tay nhất quán trong một phiên nhưng thay đổi giữa các phiên:

python Copy
from browserforge.fingerprints import Screen

# Hạn chế đến các kích thước màn hình phổ biến
screen = Screen(
    min_width=1280,
    max_width=1920,
    min_height=720,
    max_height=1080
)

async with AsyncCamoufox(
    os="windows",
    screen=screen,
) as browser:
    pass

3. Giới hạn tốc độ

Tránh kích hoạt giới hạn tốc độ bằng cách thêm độ trễ:

python Copy
import random

async def human_delay():
    """Độ trễ ngẫu nhiên để mô phỏng hành vi con người."""
    await asyncio.sleep(random.uniform(1.0, 3.0))

# Sử dụng giữa các hành động
await page.click('button')
await human_delay()
await page.fill('input', 'text')

4. Xử lý lỗi

Luôn triển khai xử lý lỗi phù hợp cho việc giải CAPTCHA:

python Copy
async def solve_with_retry(task_payload: dict, max_retries: int = 3) -> dict:
    """Giải CAPTCHA với logic thử lại."""
    for attempt in range(max_retries):
        try:
            return await solve_captcha(task_payload)
        except TimeoutError:
            if attempt < max_retries - 1:
                print(f"Thời gian chờ hết, thử lại... ({attempt + 1}/{max_retries})")
                await asyncio.sleep(5)
            else:
                raise
        except Exception as e:
            if "balance" in str(e).lower():
                raise  # Không thử lại lỗi số dư
            if attempt < max_retries - 1:
                await asyncio.sleep(2)
            else:
                raise

Thưởng: Bắt đầu hôm nay!

Bạn đã sẵn sàng để tăng tốc quy trình tự động hóa web của mình với Camoufox và CapSolver chưa?

Sử dụng mã CAMOUFOX khi đăng ký tại CapSolver để nhận thêm tín dụng!

Thưởng độc quyền này giúp bạn bắt đầu giải CAPTCHA ngay lập tức.

Kết luận

Sự tích hợp giữa CamoufoxCapSolver tạo ra một bộ công cụ mạnh mẽ cho tự động hóa web:

  • Camoufox xử lý phát hiện bot với giả mạo dấu vân tay cấp hệ thống
  • CapSolver xử lý CAPTCHA với công nghệ AI
  • Cùng nhau chúng cho phép tự động hóa mượt mà mà trông như hoạt động của con người

Dù bạn đang xây dựng công cụ thu thập dữ liệu, hệ thống kiểm tra tự động hay các chương trình quét web, sự kết hợp này cung cấp độ tin cậy và khả năng ẩn náu mà bạn cần.


Câu Hỏi Thường Gặp

Câu hỏi: Loại CAPTCHA nào hoạt động tốt nhất với sự tích hợp này?

Đáp án: CapSolver hỗ trợ tất cả các loại CAPTCHA chính. Cloudflare Turnstile và reCAPTCHA v2/v3 có tỷ lệ thành công cao nhất. Sự tích hợp hoạt động mượt mà với bất kỳ CAPTCHA nào mà CapSolver hỗ trợ.

Câu hỏi: Tôi có thể sử dụng nó trong chế độ headless không?

Đáp án: Có! Camoufox hỗ trợ chế độ headless và duy trì khả năng giả mạo dấu vân tay. Đối với reCAPTCHA v3 và CAPTCHA dựa trên token, chế độ headless hoạt động hoàn hảo. Đối với CAPTCHA v2 hiển thị, chế độ có đầu có thể mang lại kết quả tốt hơn.

Câu hỏi: Làm thế nào để tìm khóa trang cho một CAPTCHA?

Đáp án: Kiểm tra trong mã nguồn trang web cho:

  • Turnstile: thuộc tính data-sitekey hoặc các phần tử cf-turnstile
  • reCAPTCHA: thuộc tính data-sitekey trên phần tử g-recaptcha

Câu hỏi: Nếu việc giải CAPTCHA thất bại thì sao?

Đáp án: Các giải pháp phổ biến:

  1. Kiểm tra lại khóa API và số dư
  2. Đảm bảo khóa trang là chính xác
  3. Kiểm tra xem URL trang có khớp với nơi CAPTCHA xuất hiện không
  4. Đối với v3, thử điều chỉnh tham số hành động và điểm số tối thiểu
  5. Triển khai logic thử lại với độ trễ

Câu hỏi: Camoufox có hoạt động với Selenium không?

Đáp án: Camoufox được xây dựng dựa trên Playwright, không phải Selenium. Tuy nhiên, bạn có thể sử dụng cùng mẫu tích hợp API CapSolver với bất kỳ khung phần mềm tự động hóa trình duyệt nào khác.

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

Quy trình giải CAPTCHA của Camoufox và CapSolver
Cách tích hợp Camoufox với CapSolver để giải CAPTCHA một cách liền mạch

Học cách tích hợp Camoufox với CapSolver để bypass Cloudflare Turnstile và reCAPTCHA một cách đáng tin cậy tại quy mô lớn.

web scraping
Logo of CapSolver

Anh Tuan

16-Dec-2025

Cách giải CAPTCHA trong Python bằng Botasaurus và CapSolver (Hướng dẫn đầy đủ)
Cách giải CAPTCHAs bằng Python sử dụng Botasaurus và CapSolver (Hướng dẫn đầy đủ)

Học cách tích hợp Botasaurus (khung phần mềm quét web Python) với API CapSolver để tự động giải reCAPTCHA v2/v3 và Turnstile.

web scraping
Logo of CapSolver

Anh Tuan

15-Dec-2025

Tabproxy
Tabproxy: Dịch vụ proxy nhà ở giá trị tốt cho khu vực nước ngoài

Trong bài viết này, chúng tôi sẽ giới thiệu cho bạn Tabproxy là gì và các dịch vụ mà họ cung cấp.

web scraping
Logo of CapSolver

Anh Tuan

12-Dec-2025

lỗi trích xuất dữ liệu từ web
Các lỗi 402, 403, 404 và 429 là gì trong việc quét web? Hướng dẫn toàn diện

Nắm vững xử lý lỗi quét web bằng cách hiểu các lỗi 402, 403, 404 và 429. Học cách sửa lỗi 403 Cấm, triển khai giải pháp xử lý lỗi 429 và xử lý mã trạng thái 402 Yêu cầu thanh toán mới xuất hiện.

web scraping
Logo of CapSolver

Lucas Mitchell

12-Dec-2025

Trích xuất dữ liệu từ web bằng Python
Web Scraping Với Python: 2026 Các Chiến Thuật Tốt Nhất

Học các chiến thuật hàng đầu về quét web bằng Python năm 2026, bao gồm xử lý nội dung JavaScript động, quản lý các luồng xác thực, giải CAPTCHAs, nhận diện các bẫy ẩn, mô phỏng hành vi của con người, tối ưu hóa các mẫu yêu cầu và giảm tiêu thụ tài nguyên trong các dự án quét web quy mô lớn.

web scraping
Logo of CapSolver

Emma Foster

12-Dec-2025

Giải quyết Captcha khi quét trang web
Thu thập dữ liệu web mà không bị chặn và cách giải Captcha

Quét web đã trở thành kỹ thuật phổ biến để trích xuất dữ liệu từ trang web. Tuy nhiên, nhiều trang web sử dụng các biện pháp chống quét web, bao gồm...

web scraping
Logo of CapSolver

Nikolai Smirnov

11-Dec-2025