Python'da Playwright ile proxy kullanımı
Playwright ve proxy'ler
Playwright, Microsoft'un Chromium, Firefox ve WebKit'i destekleyen tarayıcı otomasyon framework'üdür. Playwright'ın Python sürümü, hem tarayıcı düzeyinde hem de ayrı context'ler için yerleşik proxy desteğine sahiptir.
Kurulum
pip install playwright
playwright install # tarayıcıları indirir
Temel proxy yapılandırması
HTTP proxy
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()
Kimlik doğrulamalı
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 proxy
browser = p.chromium.launch(
proxy={"server": "socks5://proxy_ip:port"}
)
Asenkron mod
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())
Context düzeyinde proxy'ler
Playwright, tek bir tarayıcı içinde farklı context'ler (profiller) için farklı proxy'ler tanımlamanıza izin verir:
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch()
# Context 1 — ABD proxy'si
context1 = browser.new_context(
proxy={
"server": "http://us_proxy:port",
"username": "user",
"password": "pass"
}
)
# Context 2 — Almanya proxy'si
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()
Bu güçlü bir özelliktir: tek tarayıcı, farklı proxy ve fingerprint'lere sahip birden çok context.
Belirli alan adları için proxy'yi atlama
browser = p.chromium.launch(
proxy={
"server": "http://proxy_ip:port",
"bypass": "localhost,*.local,example.com"
}
)
Bypass listesindeki alan adlarına proxy kullanılmadan doğrudan erişilir.
Headless ve headed modlar
# Headless (GUI olmadan) — scraping için
browser = p.chromium.launch(headless=True, proxy={"server": "http://proxy:port"})
# Headed (GUI ile) — hata ayıklama için
browser = p.chromium.launch(headless=False, proxy={"server": "http://proxy:port"})
Farklı tarayıcılarla çalışma
Playwright üç engine destekler:
# 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)
Üçü de proxy'leri aynı şekilde destekler.
Stealth mode ve anti-bot atlatma
Playwright, anti-bot sistemleri tarafından tespit edilir. Bunu aşmak için:
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) # stealth yamalarını uygular
page.goto("https://target-site.com")
Atlatma önerileri
- Residential veya mobil proxy'ler kullanın
- Gerçekçi bir User-Agent ayarlayın
- Viewport boyutunu yapılandırın
- Eylemler arasına gecikmeler ekleyin
- Fare hareketlerini ve kaydırmayı taklit edin
Proxy üzerinden ekran görüntüsü ve PDF
page.goto("https://example.com")
page.screenshot(path="screenshot.png", full_page=True)
page.pdf(path="page.pdf")
İstekleri yakalama
def handle_route(route):
# İstekleri değiştirme
headers = route.request.headers
headers["X-Custom-Header"] = "value"
route.continue_(headers=headers)
page.route("**/*", handle_route)
page.goto("https://example.com")
Pratik örnek: rotasyonlu scraping
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())
Sonuç
Playwright, Python'da proxy'lerle çalışmak için güçlü bir araçtır. Context düzeyindeki proxy desteği, tek bir tarayıcı içinde farklı IP'lerle birden fazla oturum çalıştırmanıza olanak tanır. Stealth yamaları ve residential proxy'ler ile birlikte kullanıldığında Playwright, korumalı sitelerin scraping'i için etkilidir.
