Sản phẩmTích hợpTài nguyênTài liệuGiá cả
Bắt đầu ngay

© 2026 CapSolver. All rights reserved.

Liên hệ chúng tôi

Slack: lola@capsolver.com

Sản phẩm

  • reCAPTCHA v2
  • reCAPTCHA v3
  • Cloudflare Turnstile
  • Cloudflare Challenge
  • AWS WAF
  • Tiện ích trình duyệt
  • Thêm nhiều loại CAPTCHA

Tích hợp

  • Selenium
  • Playwright
  • Puppeteer
  • n8n
  • Đối tác
  • Xem tất cả tích hợp

Tài nguyên

  • Chương trình giới thiệu
  • Tài liệu
  • Tham chiếu API
  • Blog
  • Câu hỏi thường gặp
  • Thuật ngữ
  • Trạng thái

Pháp lý

  • Điều khoản dịch vụ
  • Chính sách bảo mật
  • Chính sách hoàn tiền
  • Không bán thông tin cá nhân của tôi
Blog/aws waf/Cách giải Captcha / Thách thức AWS bằng Python
Sep20, 2023

Cách giải Captcha / Thách thức AWS bằng Python

Anh Tuan

Anh Tuan

Data Science Expert

Giới thiệu

Các nhiệm vụ quét web hoặc tự động hóa của bạn có bị chặn bởi tường lửa ứng dụng web AWS (AWS WAF) có vẻ như không thể vượt qua không? Đây là một thách thức phổ biến đối với nhiều nhà phát triển. AWS WAF là một dịch vụ bảo mật mạnh mẽ từ Amazon được thiết kế để bảo vệ các trang web khỏi các cuộc tấn công web phổ biến và bot độc hại. Nó nhận diện và chặn các hoạt động đáng ngờ bằng cách phân tích các mô hình lưu lượng, sử dụng các phương pháp bao gồm các thách thức JavaScript (trả về mã trạng thái 202) và các captcha hình ảnh phức tạp hơn (trả về mã trạng thái 405).

Mặc dù rất quan trọng đối với bảo vệ trang web, các biện pháp bảo mật này có thể trở thành rào cản lớn đối với các tập lệnh tự động hợp pháp. Tuy nhiên, với các công cụ đúng đắn, bạn có thể vượt qua các biện pháp bảo vệ này một cách hiệu quả. Hướng dẫn này sẽ cung cấp cho bạn một hướng dẫn chi tiết về cách sử dụng Python và CapSolver để dễ dàng lấy được aws-waf-token, cho phép truy cập liền mạch vào các trang web được bảo vệ bởi AWS WAF.

⚙️ Yêu cầu tiên quyết

Trước khi bắt đầu, hãy đảm bảo bạn có sẵn các công cụ và thông tin sau:

  • Một proxy hoạt động: Đây là yếu tố quan trọng để giải quyết AWS WAF. Rất khuyến khích sử dụng proxy ISP hoặc nhà ở để tránh bị chặn do chất lượng IP kém.
  • Python đã cài đặt: Đảm bảo Python đã được cài đặt trên hệ thống của bạn.
  • Mã API của CapSolver: Bạn sẽ cần tài khoản CapSolver (Đăng ký) để lấy mã API từ bảng điều khiển.

🤖 Bước 1: Cài đặt các gói Python cần thiết

Đầu tiên, chúng ta cần cài đặt một số thư viện Python quan trọng để thực hiện các yêu cầu HTTP và phân tích HTML. Mở terminal của bạn và thực thi lệnh sau:

bash Copy
pip install capsolver requests beautifulsoup4

👨‍💻 Bước 2: Viết mã Python để giải quyết AWS WAF

Dưới đây là mã Python hoàn chỉnh để giải quyết các thách thức và captcha của AWS WAF bằng CapSolver. Mã này dựa trên các phương pháp mới nhất từ tài liệu chính thức của CapSolver, có cấu trúc rõ ràng hơn và tự động xử lý hai tình huống chặn phổ biến nhất.

Mã Python Cập nhật

python Copy
import capsolver
import requests
from bs4 import BeautifulSoup
import re
from urllib.parse import urlparse

# -------------------VUI LÒNG THAY ĐỔI CÁC GIÁ TRỊ SAU-------------------
# Chi tiết proxy của bạn theo định dạng: http://username:password@ip:port
PROXY = "http://username:password@ip:port"
# URL của trang web mục tiêu bạn muốn giải quyết AWS WAF
PAGE_URL = "https://www.trang-web-bảo-vệ-aws-của-bạn.com"
# Mã API từ bảng điều khiển CapSolver
CAPSOLVER_API_KEY = "Mã_API_Của_Bạn"
# ----------------------------------------------------------------

def solve_aws_waf(is_captcha_challenge, **kwargs):
    """
    Giải quyết thách thức AWS WAF hoặc captcha bằng CapSolver.
    :param is_captcha_challenge: True nếu là captcha (mã trạng thái 405), False nếu là thách thức JS (mã trạng thái 202).
    :param kwargs: Các tham số cần thiết cho nhiệm vụ giải quyết.
    :return: Đối tượng giải pháp, hoặc None nếu thất bại.
    """
    task_type = "AntiAwsWafTask" if is_captcha_challenge else "AntiAwsWafTaskProxyLess"
    print(f"Tạo nhiệm vụ '{task_type}'...")
    
    task_payload = {
        "type": task_type,
        "websiteURL": PAGE_URL,
    }
    
    # Thêm các tham số cụ thể dựa trên loại thách thức
    if is_captcha_challenge:
        # Đối với các thách thức captcha, cần có awsKey, awsIv, awsContext
        task_payload.update({
            "awsKey": kwargs.get("awsKey"),
            "awsIv": kwargs.get("awsIv"),
            "awsContext": kwargs.get("awsContext"),
            "awsChallengeJS": kwargs.get("awsChallengeJS"),
            "proxy": PROXY
        })
    else:
        # Đối với các thách thức JS, chỉ cần URL của awsChallengeJS
        task_payload["awsChallengeJS"] = kwargs.get("awsChallengeJS")

    try:
        solution = capsolver.solve(task_payload)
        if solution and solution.get("errorId", 0) == 0:
            print("Giải pháp được lấy thành công!")
            return solution
        else:
            error_desc = solution.get('errorDescription', 'Lỗi không xác định') if solution else 'Lỗi không xác định'
            print(f"Không thể giải quyết nhiệm vụ: {error_desc}")
            return None
    except Exception as e:
        print(f"Đã xảy ra ngoại lệ khi gọi CapSolver: {e}")
        return None

def main():
    """Hàm chính để thực hiện toàn bộ quy trình."""
    capsolver.api_key = CAPSOLVER_API_KEY
    session = requests.Session()
    session.proxies = {"http": PROXY, "https": PROXY}
    
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36",
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8",
        "Accept-Language": "en-US,en;q=0.9",
    }

    print(f"Thử truy cập: {PAGE_URL}")
    response = session.get(PAGE_URL, headers=headers)
    print(f"Nhận được mã trạng thái: {response.status_code}")

    solution = None
    
    # Trường hợp 1: Xử lý thách thức JavaScript của AWS (Mã trạng thái 202)
    if response.status_code == 202:
        print("Phát hiện thách thức JavaScript của AWS.")
        soup = BeautifulSoup(response.content, 'html.parser')
        script_tag = soup.find('script', {'src': re.compile(r'token\.awswaf\.com')})
        if script_tag:
            challenge_js_url = script_tag['src']
            print(f"Đã tìm thấy URL thách thức JS: {challenge_js_url}")
            solution = solve_aws_waf(is_captcha_challenge=False, awsChallengeJS=challenge_js_url)
        else:
            print("Lỗi: Không thể tìm thấy script thách thức AWS.")

    # Trường hợp 2: Xử lý captcha của AWS (Mã trạng thái 405)
    elif response.status_code == 405:
        print("Phát hiện captcha của AWS.")
        soup = BeautifulSoup(response.content, 'html.parser')
        script_tag = soup.find('script', {'src': re.compile(r'token\.awswaf\.com')})
        script_text_tag = soup.find('script', string=re.compile('.*key.*'))
        
        if script_tag and script_text_tag:
            challenge_js_url = script_tag['src']
            script_text = script_text_tag.string
            
            key = re.search(r'"key":"(.*?)"', script_text).group(1)
            iv = re.search(r'"iv":"(.*?)"', script_text).group(1)
            context = re.search(r'"context":"(.*?)"', script_text).group(1)
            
            print(f"Đã trích xuất các tham số: Key={key[:5]}..., IV={iv[:5]}..., Context={context[:5]}...")
            solution = solve_aws_waf(
                is_captcha_challenge=True,
                awsKey=key,
                awsIv=iv,
                awsContext=context,
                awsChallengeJS=challenge_js_url
            )
        else:
            print("Lỗi: Không thể trích xuất tất cả các tham số captcha cần thiết từ trang.")

    # Nếu giải quyết thành công, thiết lập cookie và thử lại yêu cầu
    if solution and solution.get("cookie"):
        aws_token = solution["cookie"]
        print(f"Đã lấy được aws-waf-token thành công: {aws_token[:30]}...")
        
        domain = f".{urlparse(PAGE_URL).netloc}"
        session.cookies.set("aws-waf-token", aws_token, domain=domain)
        
        print("Cookie đã được thiết lập. Thử lại yêu cầu...")
        final_response = session.get(PAGE_URL, headers=headers)
        print(f"Mã trạng thái yêu cầu cuối cùng: {final_response.status_code}")
        
        if final_response.status_code == 200:
            print("Đã vượt qua AWS WAF thành công!")
            # print(final_response.text) # Bỏ dấu gạch chéo để xem nội dung trang
        else:
            print("Yêu cầu thất bại sau khi thiết lập cookie. Kiểm tra token hoặc proxy.")
    else:
        print("Không thể vượt qua AWS WAF. Thoát chương trình.")

if __name__ == "__main__":
    main()

⚠️ Các biến quan trọng cần thay đổi

Trước khi chạy mã, hãy chắc chắn thay đổi các biến sau:

  • PROXY: Thay thế giá trị này bằng địa chỉ và thông tin xác thực máy chủ proxy của bạn. Định dạng nên là http://username:password@ip:port.
  • CAPSOLVER_API_KEY: Tìm mã API của bạn trong Bảng điều khiển CapSolver và thay thế giá trị mẫu.
  • PAGE_URL: Thay thế giá trị này bằng URL của trang web mục tiêu được bảo vệ bởi AWS WAF.

Kết luận

Bằng cách tích hợp CapSolver vào quy trình tự động hóa Python của bạn, bạn có thể xử lý hiệu quả cả các thách thức JavaScript và captcha được kích hoạt bởi AWS WAF. Cách tiếp cận này đơn giản hóa quy trình xác minh phức tạp thành một lời gọi API duy nhất, cho phép bạn tập trung vào logic kinh doanh chính thay vì bị mắc kẹt trong cuộc chiến liên tục với công nghệ chống bot. Đây là một giải pháp vô giá cho bất kỳ nhà phát triển nào cần tương tác với các trang web được bảo vệ bởi AWS WAF.

Sử dụng mã khuyến mãi CAPN khi nạp tiền vào tài khoản CapSolver để nhận thêm 5% khuyến mãi trên mỗi lần nạp — không có giới hạn.
Nhận mã khuyến mãi ngay bây giờ trong Bảng điều khiển CapSolver

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

Câu hỏi 1: Tại sao tôi phải sử dụng proxy?
Trả lời 1: AWS WAF giám sát chặt chẽ hành vi của các địa chỉ IP. Các yêu cầu từ trung tâm dữ liệu hoặc các IP bị đánh dấu là đáng ngờ sẽ dễ bị chặn. Sử dụng proxy chất lượng cao như proxy nhà ở hoặc ISP sẽ mô phỏng hành vi truy cập của người dùng thực tế và là bước đầu tiên quan trọng để vượt qua WAF thành công.

Câu hỏi 2: Token aws-waf-token có hiệu lực bao lâu?
Trả lời 2: Thời hạn hiệu lực của token này thường rất ngắn, có thể chỉ trong vài phút. Khi token hết hạn, bạn cần chạy lại quy trình xác minh để lấy token mới. Quan trọng là thiết kế logic làm mới token trong ứng dụng của bạn.

Câu hỏi 3: Sự khác biệt giữa AntiAwsWafTask và AntiAwsWafTaskProxyLess là gì?
Trả lời 3: AntiAwsWafTask được sử dụng để giải captcha AWS, yêu cầu môi trường trình duyệt đầy đủ (thường thấy với mã trạng thái 405) và cần proxy do bạn cung cấp. AntiAwsWafTaskProxyLess được sử dụng cho thách thức JavaScript đơn giản hơn (mã trạng thái 202), được giải quyết trên máy chủ của CapSolver và không yêu cầu bạn cung cấp proxy. Mã của chúng tôi tự động chọn loại nhiệm vụ phù hợp dựa trên mã trạng thái.

Câu hỏi 4: Phương pháp này có hoạt động cho tất cả các trang web sử dụng AWS WAF không?
Trả lời 4: Phương pháp này hiệu quả đối với hầu hết các cấu hình AWS WAF tiêu chuẩn. Tuy nhiên, các chủ sở hữu trang web có thể tùy chỉnh quy tắc WAF, có thể làm tăng độ khó khi vượt qua. Nếu bạn gặp vấn đề, hãy tham khảo tài liệu hoặc hỗ trợ của CapSolver. Các thách thức khác nhau có thể yêu cầu các chiến lược khác nhau.

Xem thêm

aws wafOct 23, 2025

Giải quyết tự động CAPTCHA của AWS WAF bằng Trình duyệt hoặc Tích hợp API

Học cách tự động giải CAPTCHA AWS WAF bằng cách sử dụng tiện ích mở rộng trình duyệt và tích hợp API. Hướng dẫn này bao gồm nhận dạng hình ảnh, thách thức dựa trên token và giải pháp của CapSolver để tự động hóa mượt mà và quét web.

Anh Tuan
Anh Tuan
aws wafMar 24, 2026

Cách giải quyết CAPTCHA WAF của Amazon AWS trong Tự động hóa trình duyệt

Nâng cao kỹ năng giải quyết các thách thức CAPTCHA của Amazon AWS WAF trong tự động hóa trình duyệt với các chiến lược chuyên gia. Học cách tích hợp CapSolver để có các quy trình tự động hóa liền mạch và hiệu quả. Hướng dẫn này bao gồm các giải pháp dựa trên token và phân loại.

Nội dung

Aloísio Vítor
Aloísio Vítor
aws wafSep 14, 2023

Cách giải AWS Captcha / Thách thức bằng PHP: Hướng dẫn toàn diện

Một hướng dẫn chi tiết bằng PHP để giải quyết CAPTCHA và thách thức của AWS WAF cho trích xuất dữ liệu và tự động hóa đáng tin cậy

Anh Tuan
Anh Tuan
aws wafJul 12, 2023

Cách giải quyết token CAPTCHA của AWS WAF

Bài viết này giải thích cách bạn có thể giải quyết CAPTCHA của AWS WAF theo cách nhanh chóng, rẻ tiền và dễ dàng bằng cách sử dụng CapSolver

Anh Tuan
Anh Tuan