Nirerender ng mga headless browser ang JavaScript, kaya kinakaya nila ang mga modernong site na hindi kaya ng plain HTTP clients. Pero nagpapadala pa rin ang browser ng bawat request mula sa iisang IP, at nahuhuli ang automation sa sandaling i-rate-limit o i-fingerprint ng site ang address na iyon. Ang paggamit ng proxy sa Playwright at Puppeteer ay nagkakalat ng traffic sa maraming IP at, kapag tama ang pagkakagawa, pinaiitsura ang iyong automation na parang ordinaryong user. Narito ang gumaganang setup para sa pareho, sa Python at Node.
I-set ang proxy sa browser launch. Ipasa ang authentication bilang hiwalay na username at password field — huwag i-inline ang credentials sa server URL:
from playwright.sync_api import sync_playwright
PROXY = {
"server": "http://gate.jibaoproxy.com:10001",
"username": "USERNAME",
"password": "PASSWORD",
}
with sync_playwright() as p:
browser = p.chromium.launch(proxy=PROXY, headless=True)
page = browser.new_page()
page.goto("https://httpbin.org/ip")
print(page.inner_text("body"))
browser.close()
Inilalantad ng JIBAO ang parehong HTTP at SOCKS5 sa gateway. Gamitin ang HTTP endpoint para sa browser automation: hindi sinusuportahan ng Playwright at Puppeteer ang authenticated SOCKS5 proxies, kaya ang HTTP-with-auth ang maaasahang pagpipilian.
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch({
headless: true,
proxy: {
server: 'http://gate.jibaoproxy.com:10001',
username: 'USERNAME',
password: 'PASSWORD',
},
});
const page = await browser.newPage();
await page.goto('https://httpbin.org/ip');
console.log(await page.innerText('body'));
await browser.close();
})();
Ang pinakamalinis na paraan ng pag-rotate sa Playwright ay isang IP kada BrowserContext. Bawat context ay isang isolated session (sariling cookies at cache), kaya ang pag-bind ng bawat isa sa ibang exit IP ay nagbibigay sa iyo ng parallel na identities mula sa iisang browser process:
from playwright.sync_api import sync_playwright
def ctx_proxy(session_id):
return {
"server": "http://gate.jibaoproxy.com:10001",
"username": f"USERNAME-session-{session_id}",
"password": "PASSWORD",
}
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
for i in range(3):
context = browser.new_context(proxy=ctx_proxy(f"ctx{i}"))
page = context.new_page()
page.goto("https://httpbin.org/ip")
print(i, page.inner_text("body"))
context.close()
browser.close()
Bawat context ay gumagamit ng natatanging sticky session token, kaya stable ang IP sa loob ng isang context (mabuti para sa login flows) pero nag-iiba sa mga context (mabuti para sa pagpapatakbo ng maraming account nang sabay). Ito ang pattern na ino-automate ng mga anti-detect browser tulad ng GoLogin at Dolphin Anty — tingnan ang aming gabay sa anti-detect proxy setup.
Itinatakda ng Puppeteer ang proxy server bilang Chromium launch flag, tapos nag-a-authenticate sa page object:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
headless: 'new',
args: ['--proxy-server=http://gate.jibaoproxy.com:10001'],
});
const page = await browser.newPage();
await page.authenticate({ username: 'USERNAME', password: 'PASSWORD' });
await page.goto('https://httpbin.org/ip');
console.log(await page.evaluate(() => document.body.innerText));
await browser.close();
})();
Dahil ang proxy ay isang process-level na flag, ang iisang Puppeteer browser ay gumagamit ng iisang IP. Para mag-rotate, mag-launch ng bagong browser kada identity (mas mabigat) o ipatakbo ang rotation sa pamamagitan ng gateway na nagpapalit ng IP kada connection.
Anumang flow na gumagawa ng session cookie ay dapat panatilihin ang parehong IP sa buong buhay nito. Ang cookie na nilikha sa IP-A na biglang lumitaw mula sa IP-B ay binabasa bilang session hijacking at nag-tri-trigger ng re-auth o ban. Panatilihin ang isang context (o isang browser) kada naka-login na account, naka-pin sa isang sticky session token, para sa buong session.
Ang residential IP ay kinakailangan pero hindi sapat. Binabasa rin ng mga site ang TLS/JA4 handshake, HTTP/2 frame order, canvas, WebGL, at navigator properties ng iyong browser. Ang vanilla headless Chromium ay naglalabas ng navigator.webdriver = true at isang headless fingerprint na tumatalo sa pinakamahusay na IP. I-mitigate gamit ang stealth plugins at realistikong launch flags:
// Node: puppeteer-extra + stealth
const puppeteer = require('puppeteer-extra');
const Stealth = require('puppeteer-extra-plugin-stealth');
puppeteer.use(Stealth());
// Realistic launch flags
const browser = await puppeteer.launch({
headless: 'new',
args: [
'--proxy-server=http://gate.jibaoproxy.com:10001',
'--disable-blink-features=AutomationControlled',
'--window-size=1920,1080',
],
});
Para makita nang eksakto kung anong signal ang naglalabas ka, patakbuhin ang iyong automated browser laban sa libreng JA3/JA4 fingerprint checker ng JIBAO. Para sa mas malalim na mekanika kung bakit nafa-flag ang mga handshake, basahin ang pag-bypass sa TLS fingerprinting at ang kumpletong Cloudflare bypass recipe.
headless=False para mapanood kung ano talaga ang ipinapakita ng target sa iyong bot.Kumuha ng 500MB ng libreng traffic at residential IPs na nagpapanatili sa Playwright at Puppeteer mula sa ban list.
Simulan ang Libreng TrialAng mga bagong user ay makakatanggap ng 500MB sa pagrehistro, kasama ang bonus sa unang recharge. Limitadong oras lang ang alok.