คำตอบด่วน
ฉันจะใช้พร็อกซีที่พิสูจน์ตัวตนได้ใน Puppeteer อย่างไร?
เปิด Chrome ด้วย --proxy-server=http://gw.crawlrelay.com:7777 จากนั้นเรียก page.authenticate({ username, password }) ก่อนคำขอแรก goto Chrome จะไม่สนใจข้อมูลรับรองที่เขียนในธง CrawlRelay พร็อกซีเรซิเดนเชียลอ่านประเทศและเซสชันสติกกี้จากชื่อผู้ใช้ ดังนั้นแต่ละหน้า หรือคอนเท็กซ์สามารถมีทางออกของตัวเองได้ ทราฟฟิกคิดค่าบริการเป็น US$0.50/GB เริ่มต้นที่ 50 GB จ่ายด้วยคริปโต โดยไม่ต้อง KYC
การตั้งค่า Puppeteer แบบสั้นๆ
| ที่อยู่พร็อกซี | --proxy-server=http://gw.crawlrelay.com:7777 ใน args หรือ proxyServer บนเบราว์เซอร์คอนเท็กซ์ |
|---|---|
| ข้อมูลรับรอง | await page.authenticate({ username, password }) ก่อนที่จะไปยังหน้าเว็บ |
| เซสชันแยกกัน | browser.createBrowserContext({ proxyServer }): คอนเท็กซ์ละหนึ่งเซสชัน |
| SOCKS5 | ไม่รองรับการพิสูจน์ตัวตนใน Chrome: ใช้พอร์ต HTTP |
| ประหยัดทราฟฟิก | page.setRequestInterception(true) และยกเลิกโหลดรูปภาพ ตัวอักษร และสื่อ |
ฉันจะตั้งค่าพร็อกซีที่พิสูจน์ตัวตนเดียวได้อย่างไร?
นี่คือรูปแบบพื้นฐาน บล็อก try … finally จะปิด Chrome แม้การนำทางล้มเหลว ซึ่งสำคัญในเซิร์ฟเวอร์ที่เบราว์เซอร์ที่ถูกทอดทิ้งสะสม
import puppeteer from "puppeteer";
const browser = await puppeteer.launch({
args: ["--proxy-server=http://gw.crawlrelay.com:7777"],
});
try {
const page = await browser.newPage();
await page.authenticate({ username: "USERNAME-country-us", password: "PASSWORD" });
await page.setRequestInterception(true);
page.on("request", (req) =>
["image", "font", "media"].includes(req.resourceType()) ? req.abort() : req.continue()
);
const res = await page.goto("https://example.com/", { waitUntil: "domcontentloaded", timeout: 60000 });
console.log(res.status(), await page.title());
} finally {
await browser.close();
}ฉันจะรันหลายเซสชันหรือหลายประเทศในเบราว์เซอร์เดียวได้อย่างไร?
สร้างคอนเท็กซ์เบราว์เซอร์หนึ่งตัวต่อหนึ่งเซสชัน คอนเท็กซ์คือโปรไฟล์แยกที่มีคุกกี้ แคช และสถานะเครือข่ายของตัวเอง ดังนั้นข้อมูลรับรองที่คุณให้กับคอนเท็กซ์หนึ่งจะไม่รั่วไหลไปยังอีกคอนเท็กซ์ ให้แต่ละคอนเท็กซ์ใช้ชื่อผู้ใช้ที่มีประเทศหรือรหัสเซสชันของตัวเอง
import puppeteer from "puppeteer";
import { randomUUID } from "node:crypto";
const GATEWAY = "http://gw.crawlrelay.com:7777";
const browser = await puppeteer.launch();
async function visit(country, url) {
const session = randomUUID().replaceAll("-", "").slice(0, 10);
const context = await browser.createBrowserContext({ proxyServer: GATEWAY });
try {
const page = await context.newPage();
await page.authenticate({
username: `USERNAME-country-${country}-session-${session}-ttl-20`,
password: "PASSWORD",
});
await page.goto(url, { waitUntil: "domcontentloaded", timeout: 60000 });
return { country, session, ip: await page.evaluate(() => document.body.innerText.trim()) };
} finally {
await context.close();
}
}
try {
const results = await Promise.all([
visit("us", "https://api.ipify.org"),
visit("gb", "https://api.ipify.org"),
]);
console.table(results);
} finally {
await browser.close();
}ทำไม Puppeteer ถึงแสดง 407 หรือ ERR_TUNNEL_CONNECTION_FAILED?
เพราะ Chrome ไม่ได้ส่งข้อมูลรับรอง หรือส่งข้อมูลรับรองผิด ตรวจสอบสามข้อ:
page.authenticate()ต้องรัน ก่อน คำขอgotoครั้งแรกบนหน้านั้น- ธง
--proxy-serverหรือproxyServerต้องมีแค่สกีม โฮสต์ และพอร์ต ไม่มีส่วนuser:pass@ - ชื่อผู้ใช้ไม่มีพิมพ์ผิดในส่วนที่กำหนดเป้าหมาย: ทดสอบด้วย curl ก่อนตามที่แสดงในหน้า 407]
ถ้า curl ผ่านด้วยชื่อผู้ใช้และรหัสผ่านเดียวกันแต่ Puppeteer ยังล้มเหลว อ่าน ERR_TUNNEL_CONNECTION_FAILED]
ทราฟฟิกที่เพจ Puppeteer ใช้มีปริมาณเท่าไหร่?
ทุกอย่างที่ Chrome ดาวน์โหลดมีค่าใช้จ่าย: ทั้ง HTML, สคริปต์, สไตล์, รูปภาพ, ฟอนต์ และ API ที่เพจเรียกใช้ HTTP Archive Web Almanac 2025 วัดน้ำหนักกลางของเพจที่ 2,164 KB บนมือถือ และ 2,412 KB บนเดสก์ท็อป การบล็อกรูปภาพ ฟอนต์ และสื่อด้วยการดักจับคำขอมักลดขนาดลงเหลือไม่กี่ร้อยกิโลไบต์ และการตอบกลับจากแคชสำหรับสคริปต์ที่เรียกซ้ำช่วยลดได้อีก ใช้ พร็อกซีมือถือ 4G แบบหมุนเวียน เฉพาะกับเพจที่ต้องการเท่านั้น: ทราฟฟิกมือถือเริ่มต้นที่ US$1.50/GB 5 GB, พร็อกซีเรซิเดนเชียลเริ่มต้นที่ US$0.50/GB 50 GB
คำถามเกี่ยวกับ Puppeteer และพร็อกซี
ฉันใส่ชื่อผู้ใช้และรหัสผ่านใน --proxy-server ได้ไหม?
ไม่ได้ Chrome จะเพิกเฉยกับข้อมูลรับรองในธง --proxy-server และคำขอ HTTPS แรกจะล้มเหลวด้วย 407 ที่ซ่อนอยู่หลัง ERR_TUNNEL_CONNECTION_FAILED ใส่เฉพาะ http://host:port ในธง แล้วส่งข้อมูลรับรองด้วย page.authenticate() ในแต่ละหน้าใหม่
ฉันจะหมุน IP ระหว่างหน้าใน Puppeteer ได้อย่างไร?
เปิดแต่ละหน้าในเบราว์เซอร์คอนเท็กซ์ใหม่ หรือให้แต่ละหน้ามีชื่อผู้ใช้โดยไม่มีรหัสเซสชัน คอนเท็กซ์ใหม่จะสร้างการเชื่อมต่อใหม่ และการเชื่อมต่อแต่ละครั้งมักได้ทางออกพร็อกซีเรซิเดนเชียลแตกต่างกัน ภายในหน้าเดียว Chrome จะใช้ซ้ำการเชื่อมต่อ ดังนั้นคำขอไปยังไซต์เดียวกันมักแชร์ทางออกจนกว่าการเชื่อมต่อจะปิด
page.authenticate() ใช้กับการดักจับคำขอได้ไหม?
ได้ Puppeteer จัดการความท้าทายการพิสูจน์ตัวตนพร็อกซีเอง และตัวจัดการดักจับของคุณต้องเรียก continue() หรือ abort() ในแต่ละคำขอ ตั้งค่า authenticate() ก่อน แล้วเปิดใช้งานการดักจับคำขอตามตัวอย่างแรก
ฉันควรใช้ปลั๊กอิน stealth puppeteer-extra กับพร็อกซีไหม?
เราไม่บันทึกหรือสนับสนุนเครื่องมือที่มุ่งปกปิดการทำงานอัตโนมัติหรือหลีกเลี่ยงการตรวจจับบอท จุดประสงค์ของเครื่องมือเหล่านี้คือลัดผ่านการกรองผู้เยี่ยมชมอัตโนมัติ ซึ่งนโยบายการใช้งานที่ยอมรับได้ของเรา Acceptable Use Policy] ไม่อนุญาต ให้เรนเดอร์หน้าสาธารณะด้วยจังหวะที่สุภาพและใช้ API อย่างเป็นทางการเมื่อไซต์มีให้
Chrome เวอร์ชันไหนที่ Puppeteer ใช้กับพร็อกซี?
เวอร์ชัน Puppeteer ล่าสุดจะดาวน์โหลด Chrome สำหรับ Testing ที่ตรงกันและใช้เป็นค่าเริ่มต้น ธงพร็อกซีและ page.authenticate() ทำงานเหมือนใน Chrome ปกติ หากคุณชี้ Puppeteer ไปที่ Chrome ของคุณเองด้วย executablePath ให้เก็บเบราว์เซอร์นั้นให้อัปเดต
รัน Puppeteer ผ่าน IP พร็อกซีเรซิเดนเชียล
US$5.94 สำหรับ 10 GB, US$0.50/GB จาก 50 GB.