

در این مقاله یاد میگیریم چگونه در یک اسکریپر مبتنی بر Pyppeteer از پراکسیها استفاده کنیم. هدف این راهنما طراحی اسکریپهای قابلاعتمادتر است: از افزودن یک پراکسی ساده تا استفاده از پراکسیهای احراز هویتشده و ادغام با پروکسیAPIها (proxy port). در پایان این مطلب شما قادر خواهید بود پراکسی را به مرورگر سرنشینشده توسط Pyppeteer اضافه کنید، احراز هویت را تنظیم کنید، و نکات عملی مربوط به performance، خطاها و امنیت را رعایت نمایید.
اگر پراکسی فقط یک آدرس IP:PORT دارد و نیاز به نامکاربری/رمز ندارد، سادهترین روش اضافه کردن آن به لیست آرگومانهای launch است. مثال زیر یک اسکریپ پایهٔ پایتون نشان میدهد:
import asyncio
from pyppeteer import launch
proxy_url = '11.456.448.110:8080'
launch_options = {
'args': [f'--proxy-server={proxy_url}']
}
async def main():
browser = await launch(launch_options)
page = await browser.newPage()
await page.goto('https://httpbin.org/ip')
page_content = await page.evaluate('() => document.body.innerText')
print(page_content)
await browser.close()
asyncio.get_event_loop().run_until_complete(main())
توضیح کد:
برای سرویسهایی که نیاز به احراز هویت دارند، باز هم --proxy-server را استفاده میکنیم اما قبل از درخواست به وبسایت باید page.authenticate را فراخوانی کنیم تا مرورگر بتواند با آن پراکسی لاگین کند.
import asyncio
from pyppeteer import launch
proxy_url = '201.88.548.330:8080'
username = 'PROXY_USERNAME'
password = 'PROXY_PASSWORD'
launch_options = {
'args': [f'--proxy-server={proxy_url}']
}
async def main():
browser = await launch(launch_options)
page = await browser.newPage()
await page.authenticate({'username': username, 'password': password})
await page.goto('https://httpbin.org/ip')
print(await page.evaluate('() => document.body.innerText'))
await browser.close()
asyncio.get_event_loop().run_until_complete(main())
شرح نکات فنی و امنیتی:
چندین سرویس پراکسی امروزه یک API هوشمند فراهم میکنند که روتیشن، تشخیص بن و retry را مدیریت میکند. این سرویسها معمولا دو روش میدهند: ارسال درخواست به یک endpoint یا اتصال به یک پورت پراکسی.
مشکل اصلی استفاده از endpoint مستقیم با مرورگرهای headless زمانی رخ میدهد که سایت از لینکهای نسبی استفاده میکند؛ Pyppeteer ممکن است آدرس نسبی را به آدرس endpoint متصل کند و صفحه درست لود نشود. به همین دلیل، اگر سرویس پراکسی، گزینهٔ proxy port را دارد، آن را ترجیح دهید چون مثل یک پراکسی سنتی عمل میکند و کمتر با مسائل لینک نسبی درگیر میشوید.
import asyncio
from pyppeteer import launch
proxy_url = 'proxy.scrapeops.io:5353' # مثال proxy port
SCRAPEOPS_API_KEY = 'YOUR_API_KEY'
launch_options = {
'args': [f'--proxy-server={proxy_url}']
}
async def main():
browser = await launch({**launch_options, 'ignoreHTTPSErrors': True})
page = await browser.newPage()
# نامکاربری معمول برای این نوع ادغام ممکن است ثابت باشد
await page.authenticate({'username': 'scrapeops', 'password': SCRAPEOPS_API_KEY})
await page.goto('https://httpbin.org/ip')
print(await page.evaluate('() => document.body.innerText'))
await browser.close()
asyncio.get_event_loop().run_until_complete(main())
نکتهٔ مهم: هنگام کار با برخی proxy APIها نیاز است که ignoreHTTPSErrors: true تنظیم شود تا اشکالات گواهینامهٔ SSL که بهخاطر واسط پراکسی ایجاد میشود، مانع لود صفحه نشوند.
اضافه کردن پراکسی به Pyppeteer در اغلب موارد کافیست برای تغییر IP خروجی و کاهش احتمال بن شدن، اما برای پایداری بالا ترکیب چند تکنیک لازم است: استفاده از proxy port زمانی که در دسترس است، مدیریت همزمانی، پیادهسازی retry/ backoff و نگهداری امن کلیدها. همیشه قبل از اجرای گسترده، سناریوهای real-world را با چند آدرس تست کنید تا رفتار سایت هدف تحت پراکسی را بشناسید.
نکات سریع برای اجرا:
با رعایت این اصول میتوانید اسکریپهای Pyppeteer قابلاعتمادتری بنویسید که هم از نظر پایداری و هم از نظر امنیت مناسبتر باشند.


