🥳Tham gia Cộng đồng Scrapelessnhận thử nghiệm miễn phí của bạn để truy cập Bộ công cụ Web Scraping mạnh mẽ của chúng tôi!
Quay lại blog

Cách sử dụng Puppeteer mà không bị phát hiện

James Thompson
James Thompson

Scraping and Proxy Management Expert

24-Sep-2024

Các trang web hiện nay sử dụng phần mềm chống bot có thể xác định các scraper. Cách phòng thủ tốt nhất chống lại quá trình scraping trơn tru là sử dụng các kỹ thuật che giấu phù hợp, chẳng hạn như trình duyệt headless.

Khi web scraping, Puppeteer là một Chrome headless có thể bắt chước hoạt động của người dùng thực để tránh các anti-bot như Cloudflare. Vậy làm sao để tiếp cận nó?

Bài viết này sẽ đề cập đến các kỹ thuật tuyệt vời nhất để sử dụng Puppeteer để scrape mà không bị phát hiện. Tuy nhiên, trước đó...

Puppeteer là gì?

Puppeteer là một phần mềm Node.js cung cấp API cấp cao để truy cập trình duyệt headless Chromium theo cách lập trình.

Nó rất dễ cài đặt bằng Yarn hoặc npm, và một trong những ưu điểm chính của nó là nó có thể truy cập và sửa đổi Giao thức DevTools.

Anti-Bot có thể xác định Puppeteer không?

Thật vậy, các anti-bot này có thể xác định các trình duyệt headless như Selenium hoặc Puppeteer.

Hãy thử crawl NowSecure như một ví dụ nhanh về scraping để minh họa điều này. Trang web này thông báo cho bạn nếu bạn đã vượt qua sự bảo vệ hay không bằng cách sử dụng bot để xác minh các thử nghiệm.

Để làm được điều đó, đầu tiên chúng ta sẽ cài đặt Node.js, và sau khi hoàn thành, chúng ta sẽ cài đặt Puppeteer bằng cách chạy mã lệnh đơn giản sau.

language Copy
npm install puppeteer
language Copy
const puppeteer = require('puppeteer'); 
 
(async () => { 
        // Khởi tạo trình duyệt 
        const browser = await puppeteer.launch(); 
 
        // Tạo một trang mới với ngữ cảnh trình duyệt mặc định 
        const page = await browser.newPage(); 
 
        // Thiết lập chế độ xem trang 
        await page.setViewport({ width: 1280, height: 720 }); 
 
        // Truy cập trang web mục tiêu 
        await page.goto('https://nowsecure.nl/'); 
 
        // Chờ kiểm tra bảo mật 
        await page.waitForTimeout(30000); 
 
        // Chụp ảnh màn hình 
        await page.screenshot({ path: 'image.png', fullPage: true }); 
 
        // Đóng trình duyệt và tất cả các trang của nó 
        await browser.close(); 
})();

Do đó, trong ví dụ đó, chúng ta đã tạo một trang trình duyệt mới và truy cập trang web mục tiêu bằng cấu hình Puppeteer cơ bản. Sau khi kiểm tra bảo mật, chúng ta sẽ chụp ảnh màn hình.

3 Cách để Ngăn chặn Puppeteer bị Phát hiện

Việc đạt được hoạt động crawl trơn tru có thể phần lớn đạt được bằng cách tránh phát hiện bot của Puppeteer. Dưới đây là cách giữ cho bạn không bị chặn khi scraping và tránh phát hiện Puppeteer:

1. Sử dụng Proxy

Theo dõi IP là một trong những kỹ thuật chống bot phổ biến nhất, trong đó hệ thống phát hiện bot theo dõi các yêu cầu của trang web. Ngoài ra, anti-bot có thể xác định scraper Puppeteer khi một IP gửi ra một số lượng lớn truy vấn nhanh chóng.

Bạn có thể sử dụng proxy, hoạt động như một cổng giữa người dùng và internet, để tránh bị phát hiện trong Puppeteer. Kết quả là, proxy nhận yêu cầu từ máy chủ và chuyển tiếp chúng đến chúng ta cùng với dữ liệu phản hồi.

Để làm được điều này, chúng ta có thể chạy Puppeteer và thêm một proxy vào đối số args như sau:

language Copy
const puppeteer = require('puppeteer'); 
const proxy = ''; // Thêm proxy của bạn ở đây 
 
(async () => { 
        // Khởi tạo trình duyệt với proxy 
        const browser = await puppeteer.launch({args: ['--proxy-server=${proxy}']}); 
 
        // ... tiếp tục như trước 
})();

Bạn có mệt mỏi vì liên tục bị chặn khi web scraping?

Scrapeless: giải pháp scraping trực tuyến all-in-one tốt nhất hiện có!

Giữ ẩn danh và tránh bị cấm theo IP với hệ thống luân chuyển proxy thông minh, hiệu suất cao của chúng tôi:

Hãy thử miễn phí!

2. Tiêu đề

Tiêu đề chứa chi tiết ngữ cảnh và siêu dữ liệu về yêu cầu HTTP. Nó cho biết liệu công cụ có phải là bot hay trình duyệt web tiêu chuẩn. Bằng cách thêm các tiêu đề phù hợp vào yêu cầu HTTP, bạn có thể giúp ngăn chặn việc bị phát hiện.

Bạn có thể mở rộng chức năng của Puppeteer bằng cách thêm các tiêu đề mới như User-Agent, vì nó hoạt động dưới headlessChrome theo mặc định. Tiêu đề được sử dụng rộng rãi này, bao gồm ứng dụng, hệ điều hành, nhà cung cấp và phiên bản yêu cầu, được sử dụng trong web scraping.

language Copy
const puppeteer = require('puppeteer'); 
 
(async () => { 
        const browser = await puppeteer.launch(); 
        const page = await browser.newPage(); 
 
        // Thêm Tiêu đề 
        await page.setExtraHTTPHeaders({ 
                'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36', 
                'upgrade-insecure-requests': '1', 
                'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8', 
                'accept-encoding': 'gzip, deflate, br', 
                'accept-language': 'en-US,en;q=0.9,en;q=0.8' 
        }); 
 
        // ... tiếp tục như trước 
})();

3. Hạn chế Yêu cầu

Như đã đề cập trước đó, số lượng truy vấn mà người dùng gửi có thể được sử dụng bởi một hệ thống chống bot để theo dõi hành vi của họ. Ngoài ra, hạn chế số lượng truy vấn và tạm dừng giữa các yêu cầu giúp ngăn chặn phát hiện Puppeteer vì hầu hết người dùng không gửi hàng trăm yêu cầu mỗi giây.

Bạn có thể giới hạn các tài nguyên được hiển thị trong Puppeteer bằng cách sử dụng hàm .setRequestInterception().

language Copy
const puppeteer = require('puppeteer'); 
 
(async () => { 
        const browser = await puppeteer.launch(); 
        const page = await browser.newPage(); 
 
        // Giới hạn yêu cầu 
        await page.setRequestInterception(true); 
        page.on('request', async (request) => { 
                if (request.resourceType() == 'image') { 
                        await request.abort(); 
                } else { 
                        await request.continue(); 
                } 
        }); 
 
        // ... tiếp tục như trước 
})();

Chúng tôi từ chối các yêu cầu của Puppeteer đối với hình ảnh bằng cách đặt .setRequestInterception() = true. Chúng tôi có thể hạn chế các truy vấn theo cách này. Bởi vì có ít tài nguyên để tải và chờ đợi, chúng ta cũng sẽ có được trình trích xuất nhanh hơn.

Kết luận

Với Puppeteer, có một loạt các kỹ thuật để tránh phát hiện; trong bài đăng này, chúng tôi sẽ thảo luận về các phương pháp hiệu quả và đơn giản nhất.

Có những hạn chế khi sử dụng proxy, tiêu đề, giới hạn yêu cầu và Puppeteer-Stealth, nhưng chúng có thể giúp bạn hoàn thành nhiệm vụ. Những kỹ thuật này thường không hiệu quả khi vượt qua các biện pháp phòng thủ chống bot tinh vi.

Với chỉ một yêu cầu API, Scrapeless quản lý tất cả các khía cạnh của việc bỏ qua chống bot cho bạn, bao gồm cả CAPTCHA và trình duyệt ẩn danh luân phiên proxy. Ngoài ra, việc bắt đầu sử dụng là miễn phí.

Tại Scrapless, chúng tôi chỉ truy cập dữ liệu có sẵn công khai trong khi tuân thủ nghiêm ngặt các luật, quy định và chính sách bảo mật trang web hiện hành. Nội dung trong blog này chỉ nhằm mục đích trình diễn và không liên quan đến bất kỳ hoạt động bất hợp pháp hoặc vi phạm nào. Chúng tôi không đảm bảo và từ chối mọi trách nhiệm đối với việc sử dụng thông tin từ blog này hoặc các liên kết của bên thứ ba. Trước khi tham gia vào bất kỳ hoạt động cạo nào, hãy tham khảo ý kiến ​​cố vấn pháp lý của bạn và xem xét các điều khoản dịch vụ của trang web mục tiêu hoặc có được các quyền cần thiết.

Bài viết phổ biến nhất

Danh mục