Використання проксі в Python з Playwright
Playwright та проксі
Playwright — це фреймворк для автоматизації браузера від Microsoft, що підтримує Chromium, Firefox та WebKit. Версія Playwright для Python має вбудовану підтримку проксі на рівні браузера та для окремих контекстів.
Встановлення
pip install playwright
playwright install # downloads browsers
Базова конфігурація проксі
HTTP-проксі
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(
proxy={
"server": "http://proxy_ip:port"
}
)
page = browser.new_page()
page.goto("https://httpbin.org/ip")
print(page.content())
browser.close()
З автентифікацією
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(
proxy={
"server": "http://proxy_ip:port",
"username": "user",
"password": "pass"
}
)
page = browser.new_page()
page.goto("https://httpbin.org/ip")
print(page.content())
browser.close()
SOCKS5-проксі
browser = p.chromium.launch(
proxy={"server": "socks5://proxy_ip:port"}
)
Асинхронний режим
import asyncio
from playwright.async_api import async_playwright
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch(
proxy={
"server": "http://proxy_ip:port",
"username": "user",
"password": "pass"
}
)
page = await browser.new_page()
await page.goto("https://httpbin.org/ip")
content = await page.content()
print(content)
await browser.close()
asyncio.run(main())
Проксі на рівні контексту
Playwright дозволяє встановлювати різні проксі для різних контекстів (профілів) в одному браузері:
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch()
# Контекст 1 — проксі США
context1 = browser.new_context(
proxy={
"server": "http://us_proxy:port",
"username": "user",
"password": "pass"
}
)
# Контекст 2 — проксі Німеччини
context2 = browser.new_context(
proxy={
"server": "http://de_proxy:port",
"username": "user",
"password": "pass"
}
)
page1 = context1.new_page()
page2 = context2.new_page()
page1.goto("https://httpbin.org/ip")
page2.goto("https://httpbin.org/ip")
print("US:", page1.content())
print("DE:", page2.content())
browser.close()
Це потужна функція: один браузер, кілька контекстів з різними проксі та відбитками.
Обхід проксі для певних доменів
browser = p.chromium.launch(
proxy={
"server": "http://proxy_ip:port",
"bypass": "localhost,*.local,example.com"
}
)
Домени зі списку обходу доступні безпосередньо, минаючи проксі.
Headless та Headed режими
# Headless (без графічного інтерфейсу) — для скрапінгу
browser = p.chromium.launch(headless=True, proxy={"server": "http://proxy:port"})
# Headed (з графічним інтерфейсом) — для налагодження
browser = p.chromium.launch(headless=False, proxy={"server": "http://proxy:port"})
Робота з різними браузерами
Playwright підтримує три рушії:
# Chromium
browser = p.chromium.launch(proxy=proxy_config)
# Firefox
browser = p.firefox.launch(proxy=proxy_config)
# WebKit (Safari)
browser = p.webkit.launch(proxy=proxy_config)
Усі три підтримують проксі ідентично.
Режим невидимості та обхід анти-ботів
Playwright виявляється анти-бот системами. Щоб обійти це:
playwright-stealth
pip install playwright-stealth
from playwright.sync_api import sync_playwright
from playwright_stealth import stealth_sync
with sync_playwright() as p:
browser = p.chromium.launch(proxy={"server": "http://proxy:port"})
page = browser.new_page()
stealth_sync(page) # застосовує патчі невидимості
page.goto("https://target-site.com")
Рекомендації щодо обходу
- Використовуйте резидентні або мобільні проксі
- Встановіть реалістичний User-Agent
- Налаштуйте розмір області перегляду (viewport)
- Додайте затримки між діями
- Імітуйте рухи миші та прокручування
Знімки екрана та PDF через проксі
page.goto("https://example.com")
page.screenshot(path="screenshot.png", full_page=True)
page.pdf(path="page.pdf")
Перехоплення запитів
def handle_route(route):
# Зміна запитів
headers = route.request.headers
headers["X-Custom-Header"] = "value"
route.continue_(headers=headers)
page.route("**/*", handle_route)
page.goto("https://example.com")
Практичний приклад: Скрапінг з ротацією
import asyncio
from playwright.async_api import async_playwright
import random
PROXIES = [
{"server": "http://proxy1:port", "username": "u", "password": "p"},
{"server": "http://proxy2:port", "username": "u", "password": "p"},
{"server": "http://proxy3:port", "username": "u", "password": "p"},
]
async def scrape_page(playwright, url):
proxy = random.choice(PROXIES)
browser = await playwright.chromium.launch(proxy=proxy)
page = await browser.new_page()
try:
await page.goto(url, timeout=30000)
title = await page.title()
return title
except Exception as e:
return f"Error: {e}"
finally:
await browser.close()
async def main():
urls = [f"https://example.com/page/{i}" for i in range(10)]
async with async_playwright() as p:
tasks = [scrape_page(p, url) for url in urls]
results = await asyncio.gather(*tasks)
for url, result in zip(urls, results):
print(f"{url}: {result}")
asyncio.run(main())
Висновок
Playwright — це потужний інструмент для роботи з проксі в Python. Підтримка проксі на рівні контексту дозволяє запускати кілька сесій з різними IP в одному браузері. У поєднанні з патчами невидимості та резидентними проксі, Playwright є ефективним для скрапінгу захищених веб-сайтів.