Socks5Proxy

Playwright प्रॉक्सी सेटिंग, ब्राउज़र और कंटेक्स्ट के लिए अलग IP कनेक्शन

यह गाइड Playwright के proxy ऑप्शन में Socks5Proxy के HTTP और SOCKS5 प्रॉक्सी को server, username, password से कनेक्ट करने का तरीका, और एक ब्राउज़र में अलग-अलग कॉन्टेक्स्ट के लिए अलग-अलग IPs इस्तेमाल करने का तरीका Node.js और Python कोड में समझाती है।

Playwright की प्रॉक्सी सेटिंग क्या सुविधाजनक है?

Playwright प्रॉक्सी पते और उपयोगकर्ता नाम, पासवर्ड को एक प्रॉक्सी विकल्प के रूप में स्वीकार करता है, इसलिए प्रमाणीकरण विंडो प्रसंस्करण को अलग से करने की आवश्यकता नहीं होती है। Chromium, Firefox, WebKit तीनों ब्राउज़र एक ही विकल्प का उपयोग करते हैं।

इसके अलावा, जब आप एक ब्राउज़र चलाते हैं और उसमें कई कॉन्टेक्स्ट बनाते हैं, तो प्रत्येक कॉन्टेक्स्ट को अलग-अलग प्रॉक्सी दिया जा सकता है। कॉन्टेक्स्ट कुकीज़ और स्टोरेज से अलग एक अलग प्रोफाइल होता है, जिससे आप एक ब्राउज़र से कई आईपी और सत्रों को एक साथ प्रबंधित कर सकते हैं और मेमोरी बचा सकते हैं।

उदाहरण में IP 198.51.100.23, HTTP पोर्ट 8000, SOCKS5 पोर्ट 1080, यूजरनेम spx_user, पासवर्ड spx_pass का उपयोग किया गया है।

npm install playwright
npx playwright install chromium

पूरे ब्राउज़र में HTTP प्रॉक्सी कैसे कनेक्ट करें?

launch के proxy विकल्प में server, username, password डालें तो उस ब्राउज़र के सभी पृष्ठ एक ही प्रॉक्सी का उपयोग करेंगे। HTTPS साइट CONNECT टनल के माध्यम से एन्क्रिप्टेड होकर पास होती है।

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();

प्रत्येक कॉन्टेक्स्ट के लिए अलग IP कैसे सेट करें?

newContext में proxy विकल्प डालें तो उस संदर्भ में केवल वह प्रॉक्सी उपयोग होगा। नीचे दिया गया कोड API से सूची प्राप्त करके 3 संदर्भ बनाता है और प्रत्येक संदर्भ में दिखाई देने वाला IP प्रिंट करता है। एक साथ कई खातों को संभालने वाले कार्य में एक संदर्भ में एक खाता और एक IP जोड़ा जा सकता है।

Chromium के कुछ संस्करणों और Windows वातावरण में, कॉन्टेक्स्ट-विशिष्ट प्रॉक्सी का उपयोग करने के लिए लॉन्च में भी proxy ऑप्शन की आवश्यकता हो सकती है। ऐसे मामलों में, लॉन्च में पहले प्रॉक्सी को सेट करें और फिर प्रत्येक कॉन्टेक्स्ट के लिए इसे ओवरराइड करें।

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 प्रॉक्सी का उपयोग कैसे करें?

server में socks5:// पता डालें। Chromium SOCKS5 प्रॉक्सी के यूजरनेम और पासवर्ड प्रमाणीकरण का समर्थन नहीं करता है इसलिए SOCKS5 को IP प्रमाणीकरण से कनेक्ट करने की सलाह दी जाती है। डैशबोर्ड में सर्वर का IPv4 पंजीकृत करें और यूजरनेम, पासवर्ड के बिना केवल server डालें।

यदि यूजरनेम और पासवर्ड द्वारा कनेक्ट करना आवश्यक है, तो एक ही IP के HTTP पोर्ट का उपयोग करें। लक्ष्य साइट पर दिखाई देने वाला IP और स्थान समान होता है।

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 में कैसे उपयोग करें?

Python के लिए Playwright भी समान संरचना है। प्रॉक्सी शब्दकोश में सर्वर, उपयोगकर्ता नाम, पासवर्ड डालें। सिंक्रोनस तरीके का उदाहरण नीचे दिया गया है। एसिंक्रोनस तरीके में भी विकल्प नाम समान होते हैं।

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()

परिणाम को उस देश के उपयोगकर्ता की तरह दिखाने के लिए क्या मिलान करना चाहिए?

IP देश के अनुसार कॉन्टेक्स्ट का locale और timezoneId एक साथ सेट करने से पेज उस देश के यूजर को दिखने वाली भाषा और टाइम में रेंडर होगा। उदाहरण के लिए, जर्मनी के IP के लिए locale de-DE, timezoneId Europe/Berlin इस्तेमाल करें।

यदि आपको छवियों और वीडियो की आवश्यकता नहीं है, तो आप page.route का उपयोग करके उन अनुरोधों को अवरुद्ध कर सकते हैं, जिससे बैंडविड्थ और समय बचाया जा सकता है। साझा प्लान में मासिक बैंडविड्थ सीमा होती है, इसलिए यह विशेष रूप से उपयोगी होता है।

  • locale और timezoneId को IP देश के अनुसार सेट करें
  • एक कॉन्टेक्स्ट - एक अकाउंट - एक IP
  • अनावश्यक इमेज/वीडियो अनुरोधों को page.route से ब्लॉक करें
  • SOCKS5 के लिए IP अथॉरिजेशन, HTTP पोर्ट के लिए यूजरनेम और पासवर्ड

सूची को स्वचालित रूप से प्राप्त करने और प्रत्येक कार्य के लिए अलग-अलग उपयोग करने के लिए क्या करें?

API का GET /proxies JSON में प्रत्येक पंक्ति में IP, पोर्ट, देश प्रतिक्रिया देता है। देश शर्त डालकर प्राप्त करने पर देश-विशेष कार्य के लिए सूची तुरंत बनाई जा सकती है। नीचे दिया गया कोड अमेरिकी प्रॉक्सी प्राप्त करके कार्य संख्या के अनुसार संदर्भ बनाने का उदाहरण है। प्रतिक्रिया कॉलम नाम API दस्तावेज़ में देखे जा सकते हैं।

अगर आपके पास बहुत सारे काम हैं, तो कॉन्टेक्स्ट को खुला न छोड़ें, हर काम खत्म होने पर उसे बंद कर दें ताकि मेमोरी फ्री हो जाए।

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();

अनावश्यक अनुरोधों को ब्लॉक करके बैंडविड्थ कैसे बचाएं?

page.route या context.route से चित्र, फ़ॉन्ट, वीडियो अनुरोध को ब्लॉक करें तो पृष्ठ तेजी से खुलेगा और प्रॉक्सी बैंडविड्थ भी बचेगी। डेटा संग्रह कार्य में विशेष रूप से प्रभावी है।

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

Firefox और WebKit में भी क्या वही प्रॉक्सी उपयोग किया जा सकता है?

हां। Playwright तीनों ब्राउज़रों को समान proxy विकल्प स्वीकार करता है। यदि आप एक परीक्षण टीम हैं, तो आप एक ही प्रॉक्सी के साथ Chromium, Firefox और WebKit को क्रमशः लॉन्च कर सकते हैं और यह जांच सकते हैं कि देश-विशिष्ट पृष्ठ प्रत्येक ब्राउज़र में समान हैं या नहीं।

Firefox में SOCKS5 यूजरनेम और पासवर्ड प्रमाणीकरण ब्राउज़र स्तर पर समर्थित नहीं है, जो Chromium के समान है, इसलिए SOCKS5 को IP प्रमाणीकरण के माध्यम से कनेक्ट करें। HTTP पोर्ट तीनों ब्राउज़रों में यूजरनेम और पासवर्ड के माध्यम से कनेक्ट होता है।

यदि Playwright Test का उपयोग कर रहे हैं, तो playwright.config के use आइटम में प्रॉक्सी डालकर सभी परीक्षणों पर लागू करें या प्रोजेक्ट को देश-विशिष्ट रूप से विभाजित करके प्रत्येक को अलग प्रॉक्सी दें।

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" } } },
  ],
});

सामान्य त्रुटियों को कैसे हल करें?

net::ERR_PROXY_CONNECTION_FAILED तब होता है जब server पता या पोर्ट गलत हो। 407 या प्रमाणीकरण संबंधित त्रुटि के लिए username और password मान जांचें। Browser does not support socks5 proxy authentication त्रुटि तब होती है जब SOCKS5 में यूजरनेम और पासवर्ड डाला जाता है। IP प्रमाणीकरण में बदलें या HTTP पोर्ट का उपयोग करें।

Playwright प्रॉक्सी सेटिंग, ब्राउज़र·कंटेक्स्ट-विशिष्ट IP | Socks5Proxy