Socks5Proxy

Playwright proxy ayarları, tarayıcı ve bağlamlara farklı IP bağlama

Bu rehber, Playwright'ın proxy seçeneğine Socks5Proxy'nin HTTP ve SOCKS5 proxy'lerini server, username, password ile bağlama yöntemini ve bir tarayıcıda her bağlam için farklı IP kullanma yöntemini Node.js ve Python kodlarıyla açıklar.

Playwright'da proxy ayarı nasıl yapılır?

Playwright, proxy adresini ve kimlik bilgilerini tek bir proxy seçeneğiyle aldığından, kimlik doğrulama penceresini ayrıca işlemeniz gerekmez. Chromium, Firefox ve WebKit tarayıcılarının üçü de aynı seçenekleri kullanır.

Ayrıca tek tarayıcı çalıştırıp içinde birden fazla context oluştururken her context'e farklı proxy atayabilirsiniz. Context, çerez ve depolamanın ayrıldığı ayrı bir profil olduğundan tek tarayıcıyla birden fazla IP ve oturumu yöneterek bellekten tasarruf edebilirsiniz.

Örnekte IP 198.51.100.23, HTTP port 8000, SOCKS5 port 1080, kullanıcı adı spx_user ve şifre spx_pass kullanılmaktadır.

npm install playwright
npx playwright install chromium

Tarayıcının tamamına HTTP proxy bağlamak için ne yapmalıyım?

launch'ın proxy seçeneğine server, username, password ekleyin, böylece o tarayıcının tüm sayfaları aynı proxy'yi kullanır. HTTPS siteleri CONNECT tüneli ile şifrelenmiş olarak iletilir.

import { chromium } from "playwright";

const browser = await chromium.launch({
  proxy: { server: "http://198.51.100.23:8000", username: "spx_user", password: "spx_pass" },
});
const page = await browser.newPage();
await page.goto("https://api.ipify.org");
console.log(await page.textContent("body")); // proxy IP
await browser.close();

Bağlam başına farklı IP kullanmak için ne yapmalı?

newContext'e proxy seçeneği eklerseniz, yalnızca o bağlam o proxy'yi kullanır. Aşağıdaki kod, API ile listeyi alır ve 3 bağlamı farklı IP'lerle oluşturur ve her bağlamda görünen IP'yi yazdırır. Birden fazla hesabı aynı anda yöneten işlerde, bir bağlama bir hesap ve bir IP eşleştirerek kullanabilirsiniz.

Bazı Chromium sürümleri ve Windows ortamlarında bağlam bazlı proxy kullanmak için launch'ta da proxy seçeneği olması gerekebilir. Bu durumda launch'a ilk proxy eklenir ve her bağlamda üzerine yazılabilir.

import { chromium } from "playwright";

const KEY = "YOUR_API_KEY";
const res = await fetch("https://socks5proxy.io/api/v1/proxies/download?format=ip:port:user:pass&protocol=http", {
  headers: { Authorization: "Bearer " + KEY },
});
const lines = (await res.text()).trim().split("\n").slice(0, 3);

const browser = await chromium.launch();
for (const line of lines) {
  const [ip, port, user, pass] = line.trim().split(":");
  const context = await browser.newContext({
    proxy: { server: "http://" + ip + ":" + port, username: user, password: pass },
    locale: "en-US",
  });
  const page = await context.newPage();
  await page.goto("https://api.ipify.org");
  console.log(ip, await page.textContent("body"));
  await context.close();
}
await browser.close();

SOCKS5 proxy nasıl kullanılır?

server'a socks5:// adresi ekleyin. Chromium SOCKS5 proxy'nin kullanıcı adı ve şifre yetkilendirmesini desteklemez, bu yüzden SOCKS5'i IP yetkilendirme ile bağlamanızı öneririz. Dashboard'a çalışan sunucunun IPv4'sini kaydedin ve username, password olmadan yalnızca server ekleyin.

Kullanıcı adı ve şifre ile bağlantı kurmanız gerekiyorsa, aynı IP'nin HTTP portunu kullanabilirsiniz. Hedef sitede görünen IP ve konum aynı olacaktır.

import { chromium } from "playwright";

const browser = await chromium.launch({
  proxy: { server: "socks5://198.51.100.23:1080" }, // server IP is authorized in the dashboard
});
const page = await browser.newPage();
await page.goto("https://api.ipify.org");
console.log(await page.textContent("body"));
await browser.close();

Python'da nasıl kullanılır?

Python için Playwright da aynı yapıdadır. Proxy sözlüğüne server, username, password eklenir. Senkron örnek aşağıda verilmiştir. Asenkron yöntemde de seçenek adları aynıdır.

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(proxy={
        "server": "http://198.51.100.23:8000",
        "username": "spx_user",
        "password": "spx_pass",
    })
    page = browser.new_page()
    page.goto("https://api.ipify.org")
    print(page.text_content("body"))
    browser.close()

Sonuçları o ülkenin kullanıcıları gibi göstermek için nelere dikkat etmek gerekir?

IP ülkesine göre context'in locale ve timezoneId'sini birlikte ayarlarsanız sayfa o ülke kullanıcılarına gösterilen dil ve saatle render edilir. Örneğin Almanya IP'si için locale de-DE, timezoneId Europe/Berlin kullanabilirsiniz.

Resim ve videolara ihtiyacınız yoksa page.route ile bu istekleri engelleyerek bant genişliği ve zamandan tasarruf edebilirsiniz. Paylaşımlı planlarda aylık bant genişliği sınırlı olduğundan bu özellik özellikle faydalıdır.

  • locale ve timezoneId'yi IP ülkesine göre ayarlayın
  • Bir bağlamda bir hesap, bir IP
  • Gereksiz resim/video isteklerini page.route ile engelleme
  • SOCKS5 için IP yetkilendirme, kullanıcı adı ve şifre HTTP portunda

Listeyi otomatik olarak alıp her görev için nasıl kullanabilirim?

API'nin GET /proxies'i JSON olarak her satırda IP, port ve ülke bilgisi döndürür. Ülke koşulu ekleyerek alırsanız, ülkeye özgü işlemler için uygun listeyi hemen oluşturabilirsiniz. Aşağıdaki kod, sadece ABD proxy'lerini alıp işlem sayısı kadar bağlam oluşturan bir örnektir. Yanıt alan adlarını API dokümantasyonundan kontrol edebilirsiniz.

Çok sayıda işiniz varsa, bağlamı sonuna kadar açık bırakmayın ve her iş bitiminde kapatarak belleği geri verin.

import { chromium } from "playwright";

const KEY = "YOUR_API_KEY";
const res = await fetch("https://socks5proxy.io/api/v1/proxies?country=us&protocol=http", {
  headers: { Authorization: "Bearer " + KEY },
});
const { proxies } = await res.json();

const browser = await chromium.launch();
for (const p of proxies.slice(0, 5)) {
  const context = await browser.newContext({
    proxy: { server: "http://" + p.host + ":" + p.http_port, username: p.username, password: p.password },
    locale: "en-US",
    timezoneId: "America/New_York",
  });
  const page = await context.newPage();
  await page.goto("https://api.ipify.org");
  console.log(await page.textContent("body"));
  await context.close();
}
await browser.close();

Gereksiz istekleri engelleyerek bant genişliğinden nasıl tasarruf edilir?

page.route veya context.route ile resim, yazı tipi, video isteklerini engellerseniz, sayfa daha hızlı açılır ve proxy bant genişliği tasarrufu sağlanır. Özellikle yalnızca veri toplama işlerinde çok etkilidir.

await context.route("**/*", (route) => {
  const type = route.request().resourceType();
  return ["image", "font", "media"].includes(type) ? route.abort() : route.continue();
});

Firefox ve WebKit'te aynı proxy kullanılabilir mi?

Evet. Playwright üç tarayıcıda da aynı proxy seçeneklerini alır. Test ekibiyseniz aynı proxy ile Chromium, Firefox ve WebKit'i sırayla açarak ülkeye özel sayfaların tarayıcılar arasında tutarlı olup olmadığını kontrol edebilirsiniz.

Firefox, SOCKS5 kullanıcı adı/şifre kimlik doğrulamasını tarayıcı düzeyinde desteklememesi açısından Chromium ile benzerdir, bu nedenle SOCKS5 için IP yetkilendirme ile bağlantı kurun. HTTP portu her üç tarayıcıda da kullanıcı adı ve şifre ile bağlanır.

Playwright Test kullanıyorsanız, playwright.config dosyasındaki use bölümüne proxy ekleyerek tüm testlere uygulayabilir veya projeleri ülkelere göre ayırıp her birine farklı proxy verebilirsiniz.

import { defineConfig } from "@playwright/test";

export default defineConfig({
  projects: [
    { name: "us", use: { locale: "en-US", proxy: { server: "http://198.51.100.23:8000", username: "spx_user", password: "spx_pass" } } },
    { name: "de", use: { locale: "de-DE", proxy: { server: "http://198.51.100.24:8000", username: "spx_user", password: "spx_pass" } } },
  ],
});

Sık karşılaşılan hatalar nasıl çözülür?

net::ERR_PROXY_CONNECTION_FAILED, server adresi veya port yanlış olduğunda olur. 407 veya yetkilendirme ile ilgili hatalar için username ve password değerlerini kontrol edin. Browser does not support socks5 proxy authentication hatası SOCKS5'e kullanıcı adı ve şifre girdiğinizde çıkar. IP yetkilendirmeye geçin veya HTTP portunu kullanın.

Playwright proxy ayarları, tarayıcı·bağlam başına IP | Socks5Proxy