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

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

Logo of CapSolver

Anh Tuan

Data Science Expert

04-Dec-2025

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 AntiAwsWafTaskAntiAwsWafTaskProxyLess 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.

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

Cách giải quyết bài kiểm tra Captcha / Thách thức của AWS bằng Python
Cách giải Captcha / Thách thức AWS bằng Python

Một hướng dẫn thực tế về việc xử lý các thách thức của AWS WAF bằng Python và CapSolver, cho phép truy cập mượt mà hơn vào các trang web được bảo vệ

AWS WAF
Logo of CapSolver

Anh Tuan

04-Dec-2025

Cách giải quyết token Captcha của AWS (AMAZON) WAF
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

AWS WAF
Logo of CapSolver

Anh Tuan

01-Dec-2025

Cách giải Captcha AWS bằng Puppeteer [Javascript] với phần mở rộng CapSolver
Làm thế nào để giải AWS Captcha sử dụng Puppeteer [Javascript] với phần mở rộng CapSolver

Học cách giải quyết captcha AWS một cách mượt mà bằng Puppeteer và Capsolver Extension, một hướng dẫn chi tiết về việc cài đặt và tự động hóa các giải pháp captcha hiệu quả

AWS WAF
Logo of CapSolver

Anh Tuan

25-Nov-2025

Cách giải CAPTCHA của AWS bằng NodeJS
Cách giải Captcha của AWS bằng NodeJS

Trong bài viết này, chúng tôi sẽ chỉ cho bạn cách giải quyết Captcha / Thách thức AWS bằng Node.JS.

AWS WAF
Logo of CapSolver

Anh Tuan

03-Nov-2025

Gỡ dữ liệu web so với API
So sánh Web Scraping và API: Thu thập dữ liệu bằng web scraping và API

Học cách phân biệt giữa web scraping và API, các ưu điểm và nhược điểm của chúng, và phương pháp nào hiệu quả nhất để thu thập dữ liệu web có cấu trúc hoặc không có cấu trúc.

AWS WAF
Logo of CapSolver

Anh Tuan

29-Oct-2025

Công cụ giải CAPTCHA cho Tường lửa ứng dụng web AWS
Giải CAPTCHA AWS WAF: Giải pháp Token & Hình ảnh cho Người quét trang web

Học cách giải quyết các thách thức CAPTCHA của AWS WAF cho việc quét web và tự động hóa. Hướng dẫn thực tế về các giải pháp dựa trên token và hình ảnh, so sánh giữa API và tích hợp trình duyệt, cũng như các nguyên tắc tốt nhất.

AWS WAF
Logo of CapSolver

Anh Tuan

28-Oct-2025