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

Scraping and Proxy Management Expert
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
npm install puppeteer
language
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
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
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
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.