تعرض المتصفحات بلا واجهة (headless) شيفرة JavaScript، لذا فهي تتعامل مع المواقع الحديثة التي لا تستطيع عملاء HTTP العاديون التعامل معها. لكن المتصفح ما زال يرسل كل طلب من عنوان IP واحد، ويُكشف الأتمتة لحظة أن يفرض الموقع حدًّا للمعدّل أو يأخذ بصمة لذلك العنوان. استخدام البروكسيات مع Playwright وPuppeteer يوزّع حركة المرور عبر عناوين IP متعددة، وإذا أُحسن تنفيذه، يجعل أتمتتك تبدو كمستخدمين عاديين. إليك الإعداد العملي لكليهما، في Python وNode.
اضبط البروكسي عند إطلاق المتصفح. مرّر المصادقة كحقلَي username وpassword منفصلين — لا تُضمّن بيانات الاعتماد داخل عنوان الخادم:
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()
يكشف JIBAO كلًّا من HTTP وSOCKS5 على البوابة. استخدم نقطة نهاية HTTP لأتمتة المتصفح: لا يدعم Playwright وPuppeteer بروكسيات SOCKS5 ذات المصادقة، لذا فإن HTTP مع المصادقة هو الخيار الموثوق.
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();
})();
أنظف طريقة للتدوير في Playwright هي عنوان IP واحد لكل BrowserContext. كل سياق هو جلسة معزولة (لها ملفات تعريف الارتباط والذاكرة المؤقتة الخاصة بها)، لذا فإن ربط كل واحد بعنوان IP خروج مختلف يمنحك هويات متوازية من عملية متصفح واحدة:
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()
يستخدم كل سياق رمز جلسة ثابتة مميزًا، لذا يبقى عنوان IP مستقرًّا داخل السياق الواحد (جيد لتدفقات تسجيل الدخول) لكنه يختلف عبر السياقات (جيد لتشغيل حسابات كثيرة بالتوازي). هذا هو النمط الذي تُؤتمته المتصفحات المضادة للكشف مثل GoLogin وDolphin Anty — راجع دليل إعداد البروكسي المضاد للكشف لدينا.
يضبط Puppeteer خادم البروكسي كعلَم إطلاق لـ Chromium، ثم يصادق على كائن الصفحة:
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();
})();
ولأن البروكسي علَم على مستوى العملية، فإن متصفح Puppeteer الواحد يستخدم عنوان IP واحدًا. للتدوير، أطلق متصفحًا جديدًا لكل هوية (أثقل) أو قُد التدوير عبر بوابة تغيّر عناوين IP لكل اتصال.
أي تدفق يُنشئ ملف تعريف ارتباط جلسة يجب أن يحتفظ بنفس عنوان IP طوال عمره. ملف تعريف الارتباط الذي صيغ على IP-A ثم يظهر فجأة من IP-B يُقرأ على أنه اختطاف للجلسة ويُطلق إعادة مصادقة أو حظرًا. احتفظ بسياق واحد (أو متصفح واحد) لكل حساب مسجّل الدخول، مثبّت على رمز جلسة ثابتة واحد، طوال الجلسة بأكملها.
عنوان IP السكني ضروري لكنه غير كافٍ. تقرأ المواقع أيضًا مصافحة TLS/JA4 الخاصة بمتصفحك، وترتيب إطارات HTTP/2، وcanvas، وWebGL، وخصائص navigator. يسرّب Chromium بلا واجهة بصيغته الافتراضية القيمة navigator.webdriver = true وبصمة headless تهزم أفضل عنوان IP. خفّف من ذلك باستخدام إضافات التخفّي وعلامات إطلاق واقعية:
// 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',
],
});
لترى بالضبط أي إشارات تسرّبها، شغّل متصفحك المُؤتمت ضد أداة فحص بصمة JA3/JA4 المجانية من JIBAO. وللتعمّق في آليات سبب وضع علامة على المصافحات، اقرأ تجاوز بصمة TLS ووصفة تجاوز Cloudflare الكاملة.
headless=False لتشاهد ما يعرضه الهدف فعليًا على روبوتك.احصل على رصيد مجاني بحجم 500 ميجابايت وعناوين IP سكنية تبقي Playwright وPuppeteer بعيدًا عن قائمة الحظر.
ابدأ التجربة المجانيةيحصل المستخدمون الجدد على 500MB عند التسجيل، بالإضافة إلى مكافأة على أول عملية شحن. العرض لفترة محدودة.