In this Article
Selenium Wire پراکسی Python میں تصدیق شدہ براؤزر آٹومیشن چلانے کا سب سے آسان راستہ ہے، کیونکہ Selenium Wire login:password والا پراکسی URL ایک ہی آپشن میں براہ راست قبول کر لیتا ہے۔ اس طرح سادہ Selenium میں درکار ایکسٹینشن بنانے کی جھنجھٹ نہیں رہتی۔ یہ براؤزر کی ہر HTTP درخواست اور جواب بھی دکھاتا ہے، اسی لیے اسکریپنگ اور QA ٹیمیں اسے استعمال کرتی ہیں۔
یہ گائیڈ مکمل عملی رہنمائی فراہم کرتی ہے۔ اس میں لائبریری کی محفوظ تنصیب اور ورژن پن کرنا، تصدیق شدہ پراکسی لگانا، ایگزٹ IP کی جانچ، درخواستوں کا معائنہ اور ان کا انتظار، ہیڈرز میں ترمیم، IP کی گردش، ہیڈلیس موڈ میں چلانا، میموری کم کرنا، HTTPS سرٹیفکیٹ کو درست طریقے سے سنبھالنا، اسے undetected-chromedriver کے ساتھ جوڑنا، اور جدید متبادلات کہاں موزوں ہیں، سب شامل ہیں۔
DataImpulse ایک اخلاقی پراکسی فراہم کنندہ ہے جو 195 ممالک میں 9 کروڑ سے زائد رہائشی، موبائل اور ڈیٹا سینٹر IP پتے پیش کرتا ہے۔ یہ 1 ڈالر فی GB سے شروع ہونے والا استعمال کے مطابق ادائیگی ماڈل استعمال کرتا ہے جس میں ٹریفک ضائع نہیں ہوتی، اور یہ ویب اسکریپنگ، اشتہارات کی تصدیق، قیمتوں کی نگرانی، مارکیٹ ریسرچ اور متعدد اکاؤنٹس کے انتظام کے لیے استعمال ہوتا ہے۔
اہم حقائق
- Selenium Wire پراکسی: Selenium Wire، seleniumwire_options میں login:password والا پراکسی URL براہِ راست قبول کرتا ہے، چنانچہ تصدیق شدہ براؤزر آٹومیشن اُس ایکسٹینشن والے چکر کے بغیر چلتی ہے جو سادہ Selenium کو درکار ہوتا ہے۔
- بہترین پراکسی قسم: گردشی رہائشی پراکسیز، جو حقیقی صارف IP استعمال کرتی ہیں اور شناخت کے خطرے کو کم کرتی ہیں۔
- قیمت: 1 ڈالر فی GB سے، استعمال کے مطابق ادائیگی، ضائع نہ ہونے والی ٹریفک اور بغیر کسی سبسکرپشن کے۔
- کوریج: 195 ممالک میں 9 کروڑ سے زائد اخلاقی طور پر حاصل کیے گئے IP۔
- قابلِ اعتماد: 99.51% کامیابی کی شرح، G2 پر 5 میں سے 4.8 درجہ بندی۔
- پروٹوکولز اور ہدف بندی: HTTP، HTTPS اور SOCKS5، ملک کے حساب سے ہدف بندی شامل ہے۔

Selenium Wire کیا ہے اور کیا اب بھی اس کی دیکھ بھال ہوتی ہے؟
Selenium Wire ایک Python لائبریری ہے جو Selenium کو وسعت دیتی ہے تاکہ آپ کا اسکرپٹ براؤزر کی HTTP درخواستوں اور جوابات کا معائنہ کر سکے، ان کا انتظار کر سکے اور انہیں تبدیل کر سکے، اور یہ بہتر تصدیق شدہ پراکسی سپورٹ بھی شامل کرتی ہے۔ یہ ایک مقامی man-in-the-middle پراکسی چلا کر کام کرتی ہے جس سے براؤزر کو گزارا جاتا ہے، پھر ٹریفک کو آپ کی اصل اپ اسٹریم پراکسی کی طرف بھیج دیتی ہے۔
واضح بات یہ ہے کہ اصل پروجیکٹ آرکائیو کر دیا گیا ہے اور اب فعال طور پر اس کی دیکھ بھال نہیں ہوتی۔ یہ اب بھی پروڈکشن میں ٹھیک چلتا ہے، لیکن آپ کو اپنے ورژن پن کرنے چاہئیں اور کسی بھی Selenium، Chrome یا انحصار کو اپ گریڈ کرکے جاری کرنے سے پہلے الگ تھلگ ماحول میں جانچنا چاہیے۔ کمیونٹی فورکس بھی موجود ہیں جو مطابقت کی اصلاحات شامل کرتے رہتے ہیں، اور اس گائیڈ میں آگے چل کر موازنے کا جدول دکھاتی ہے کہ کب Playwright جیسا دیکھ بھال شدہ ٹول طویل مدت کے لیے بہتر بنیاد ثابت ہوتا ہے۔
ٹیمیں اب بھی اسے اسی سہولت کی وجہ سے چنتی ہیں۔ اگر آپ کے پاس پہلے سے Selenium کا ٹیسٹ سوٹ یا اسکریپر موجود ہے، تو Selenium Wire شامل کرنا import کی ایک لائن بدلنے اور ایک پراکسی آپشن جتنا ہے، اور آپ کو فوراً تصدیق شدہ پراکسی سپورٹ اور صفحے کی ہر درخواست پڑھنے کی صلاحیت دونوں مل جاتی ہیں۔ سادہ Selenium پر درخواست کی سطح پر وہی رسائی دوبارہ بنانا حقیقی محنت ہے، چنانچہ موجودہ کوڈ بیسز کے لیے یہ انتخاب آرکائیو شدہ حالت کے باوجود اکثر فائدہ مند رہتا ہے۔ اگر آپ ڈیٹا اکٹھا کرنے کے لیے حقیقی براؤزر چلانے میں نئے ہیں، تو متحرک ویب صفحات کو کیسے اسکریپ کریں پر ہماری گائیڈ رینڈرنگ کے وسیع تناظر اور یہ کہ براؤزر کب واقعی ضروری ہوتا ہے، اس کا احاطہ کرتی ہے۔
Selenium Wire کیسے انسٹال کریں اور خرابیوں سے بچنے کے لیے ورژن کیسے پن کریں؟
selenium کے ساتھ selenium-wire انسٹال کریں، اور blinker کو 1.8 سے نیچے پن کریں کیونکہ اُس ریلیز نے ایک اندرونی نام ہٹا دیا تھا جسے Selenium Wire شروع ہوتے وقت import کرتا ہے۔ چونکہ پروجیکٹ آرکائیو ہے، بغیر پن کیے گئے انحصار سب سے عام وجہ ہیں کہ چلتا ہوا سیٹ اپ اچانک ناکام ہو جاتا ہے۔
عام خرابی blinker کے خود بخود اپ گریڈ ہونے کے بعد WeakNamespace پر ImportError ہے۔ ورژن پن کرنے سے اس سے بچا جا سکتا ہے:
# Selenium Wire is archived. Pin known-good versions so an upstream release
# does not break your build overnight.
#
# blinker >= 1.8 removed blinker._saferef / WeakNamespace, which Selenium Wire
# imports at startup. On blinker 1.8+ you get:
# ImportError: cannot import name 'WeakNamespace' from 'blinker'
# The fix is to hold blinker below 1.8.
pip install "selenium-wire==5.1.0" "selenium==4.9.1" "blinker==1.7.0"
# Selenium Wire also depends on brotli and can trip on very new Selenium.
# If you must run current Selenium, test in a throwaway virtualenv first, or
# move to a maintained fork such as selenium-wire-2 that tracks these fixes.
ان پنز کو ایک requirements فائل میں رکھیں تاکہ مسلسل انٹیگریشن اور ساتھی وہی آزمایا ہوا مجموعہ حاصل کریں۔ جب آپ نئے Selenium پر منتقل ہونا چاہیں، تو اسے سوچے سمجھے اپ گریڈ کے طور پر لیں جس کا اپنا ٹیسٹ رن ہو، بجائے اس کے کہ pip کو ہر چیز کا تازہ ترین ورژن حل کرنے دیں۔
Selenium Wire میں تصدیق شدہ پراکسی کیسے سیٹ کریں؟
driver بناتے وقت seleniumwire_options کے اندر ایک پراکسی ڈکشنری دیں، جس میں یوزر نیم اور پاس ورڈ URL میں شامل ہوں اور localhost کو no_proxy کے ذریعے باہر رکھا گیا ہو۔ یہی وہ واحد خصوصیت ہے جو پراکسی والے کام کے لیے سادہ Selenium کے بجائے Selenium Wire استعمال کرنے کو کارآمد بناتی ہے۔
webdriver کو selenium کے بجائے seleniumwire سے import کریں، پھر اسے آپشنز دے دیں۔ اسناد، ہوسٹ اور پورٹ آپ کے فراہم کنندہ کے ڈیش بورڈ سے آتے ہیں۔ DataImpulse کے ساتھ ہوسٹ gw.dataimpulse.com اور پورٹ 823 ہے:
from seleniumwire import webdriver # import from seleniumwire, not selenium
proxy_url = "http://login:[email protected]:823"
seleniumwire_options = {
"proxy": {
"http": proxy_url,
"https": proxy_url,
"no_proxy": "localhost,127.0.0.1",
}
}
driver = webdriver.Chrome(seleniumwire_options=seleniumwire_options)
driver.get("https://example.com")
print(driver.title)
driver.quit()
no_proxy کی انٹری مقامی پتوں کو پراکسی سے باہر رکھتا ہے تاکہ driver براہ راست ChromeDriver سے رابطہ کر سکے۔ اگر تصدیق غلط ہو تو عموماً آپ کو 407 جواب نظر آئے گا؛ 407 Proxy Authentication Required خرابی پر ہمارا نوٹ بتاتا ہے کہ اسے کیسے تشخیص کی جائے۔ عمومی طور پر اسناد والی پراکسیز کیسے کام کرتی ہیں، اس کے پس منظر کے لیے رہائشی پراکسیز دیکھیں۔
یہ کیسے جانچیں کہ پراکسی کا ایگزٹ IP کام کر رہا ہے؟
driver کو api.ipify.org جیسے IP دکھانے والے اینڈ پوائنٹ کی طرف موڑیں اور تصدیق کریں کہ واپس آنے والا پتہ آپ کی اپنی مشین کے بجائے پراکسی کا ہے۔ صرف صفحہ لوڈ ہو جانے سے یہ فرض نہ کریں کہ پراکسی واقعی فعال ہے۔
import json
from seleniumwire import webdriver
proxy_url = "http://login:[email protected]:823"
seleniumwire_options = {
"proxy": {"http": proxy_url, "https": proxy_url,
"no_proxy": "localhost,127.0.0.1"}
}
driver = webdriver.Chrome(seleniumwire_options=seleniumwire_options)
driver.get("https://api.ipify.org/?format=json")
body = driver.find_element("tag name", "body").text
exit_ip = json.loads(body)["ip"]
print("Exit IP:", exit_ip) # should be the proxy, not your own address
driver.quit()
اگر جواب آپ کا اصل IP دکھائے تو تین چیزیں جانچنے کے قابل ہیں: کہ no_proxy غلطی سے آپ کے ہدف سے تو نہیں مل رہا، کہ اسناد درست ہیں، اور کہ آپ نے webdriver کو seleniumwire سے import کیا۔ اس جانچ کو ہر نئے کام کے پہلے قدم کے طور پر چلائیں، اور پراکسی سیٹنگز بدلنے کے بعد اسے دوبارہ چلائیں۔
مخصوص درخواستوں کا معائنہ اور انتظار کیسے کریں؟
driver.requests پڑھیں تاکہ براؤزر کی ہر درخواست اور جواب کو دیکھ سکیں، اور driver.wait_for_request استعمال کریں تاکہ کسی مماثل کال کے آنے تک رک سکیں۔ یہی وہ صلاحیت ہے جو Selenium Wire کو عام WebDriver سے الگ کرتی ہے، اور یہ کسی صفحے کے پیچھے موجود JSON API تلاش کرنے کے لیے بہت مفید ہے۔
from seleniumwire import webdriver
driver = webdriver.Chrome(seleniumwire_options=seleniumwire_options)
driver.get("https://example.com/products")
# Block until a request whose URL matches the regex is captured.
request = driver.wait_for_request(r"/api/v2/products", timeout=15)
print(request.method, request.url)
print("Status:", request.response.status_code)
print("Type:", request.response.headers["Content-Type"])
# Walk every captured request/response pair the browser made.
for r in driver.requests:
if r.response:
print(r.response.status_code, r.url)
driver.quit()
wait_for_request کال ایک ریگولر ایکسپریشن لیتی ہے جو URL کے مقابل ملایا جاتا ہے اور درخواست پکڑتے ہی واپس آ جاتی ہے، چنانچہ آپ کمزور مقررہ sleeps سے بچ جاتے ہیں۔ ایک بار جب آپ جان لیں کہ کون سی پس منظر میں چلنے والی کال ڈیٹا لاتی ہے، تو اکثر آپ رینڈرنگ کو مکمل طور پر چھوڑ کر اُس اینڈ پوائنٹ کو براہ راست کال کر سکتے ہیں، جو کہیں زیادہ سستا ہے۔ یہ تکنیک ویب اسکریپنگ کی بہترین عادات کا مرکز ہے۔
ایک انٹرسیپٹر کے ساتھ درخواست کے ہیڈرز کیسے تبدیل کریں؟
driver.request_interceptor کو ایک فنکشن دیں اور یہ براؤزر سے نکلنے سے پہلے ہر درخواست پر چلتا ہے، جو آپ کو ہیڈرز اوور رائٹ کرنے، ٹوکن داخل کرنے یا پیرامیٹرز حذف کرنے دیتا ہے۔ ایک حقیقی لگنے والا User-Agent اور زبان سیٹ کرنا اسے استعمال کرنے کی ایک عام وجہ ہے۔
from seleniumwire import webdriver
driver = webdriver.Chrome(seleniumwire_options=seleniumwire_options)
def interceptor(request):
# Delete first, then set, so you replace the header instead of duplicating it.
del request.headers["User-Agent"]
request.headers["User-Agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
request.headers["Accept-Language"] = "en-US,en;q=0.9"
driver.request_interceptor = interceptor
driver.get("https://httpbin.org/headers")
print(driver.find_element("tag name", "body").text)
driver.quit()
نئی قدر مقرر کرنے سے پہلے موجودہ ہیڈر پہلے حذف کریں، ورنہ Selenium Wire اصل ہیڈر اور آپ کا متبادل دونوں بھیج سکتا ہے۔ ایک مماثل response_interceptor آپ کو جوابات پڑھنے یا تبدیل کرنے دیتا ہے۔ انٹرسیپٹرز کو ہلکا رکھیں، کیونکہ یہ تصاویر اور اسکرپٹس سمیت ہر درخواست پر چلتے ہیں۔ مستقل اور انسان جیسے دکھنے والے ہیڈرز ویب اسکریپنگ کی بہترین عادات میں سب سے باریک اشاروں میں سے ایک ہیں۔
Selenium Wire میں ہر درخواست پر پراکسیز کیسے گردش دیں؟
آپ کے پاس دو طریقے ہیں: چلتے وقت driver.proxy دوبارہ دیں تاکہ اسی براؤزر میں ترتیب بدلی جا سکے، یا driver کو دوبارہ بنائیں جب آپ ایک صاف پروفائل اور cookie جار بھی چاہتے ہوں۔ DataImpulse جیسا گردشی گیٹ وے پہلے ہی نئے کنکشن پر نیا رہائشی ایگزٹ دے دیتا ہے، چنانچہ زیادہ تر کاموں کو صرف کسی دوسرے ملک کے لیے ترتیب بدلنے کی ضرورت ہوتی ہے۔
from seleniumwire import webdriver
base = "http://login:[email protected]:823"
opts = {"proxy": {"http": base, "https": base,
"no_proxy": "localhost,127.0.0.1"}}
driver = webdriver.Chrome(seleniumwire_options=opts)
# Option A: reassign driver.proxy at runtime to switch config (for example a
# different country gateway) without rebuilding the browser. Cheap and fast.
uk = "http://login:[email protected]:823"
driver.proxy = {"http": uk, "https": uk, "no_proxy": "localhost,127.0.0.1"}
driver.get("https://api.ipify.org")
print(driver.find_element("tag name", "body").text)
driver.quit()
# Option B: recreate the driver per job when you need a guaranteed clean
# browser profile and cookie jar as well as a fresh exit IP.
def fresh_driver():
return webdriver.Chrome(seleniumwire_options=opts)
for _ in range(3):
d = fresh_driver()
d.get("https://api.ipify.org")
print(d.find_element("tag name", "body").text)
d.quit()
driver.proxy دوبارہ سیٹ کرنا سستا ہے اور براؤزر کو چلتا رہنے دیتا ہے، جو ان زیادہ حجم والے لوپس کے لیے موزوں ہے جہاں شروع کرنے کی لاگت زیادہ ہو۔ driver دوبارہ بنانا زیادہ بھاری ہے لیکن کاموں کے درمیان الگ شناخت کی ضمانت دیتا ہے، جو تب اہم ہوتا ہے جب کوئی ہدف سیشنز کو IP کے ساتھ ساتھ cookies اور لوکل اسٹوریج سے بھی باندھے۔ اس بنیاد پر انتخاب کریں کہ آپ کو صاف شناخت چاہیے یا صرف ایک نیا پتہ۔ ایک عملی اصول یہ ہے کہ گمنام عوامی صفحات سے ڈیٹا لیتے ہوئے پراکسی دوبارہ دیں، اور جب بھی آپ کسی اکاؤنٹ یا لاگ ان کی حد پار کریں تو driver دوبارہ بنائیں، تاکہ ایک رن سے لیک ہونے والی کوئی cookie آپ کے پیچھے اگلے رن میں ساتھ نہ جائے۔ جو موبائل ہدف جارحانہ انداز میں فنگر پرنٹنگ کرتے ہیں وہ اکثر مشکل ترین صورتوں کے لیے موبائل پراکسیز کو جواز فراہم کرتے ہیں، جبکہ ہلکے صفحات کم لاگت ایگزٹ پر رہ سکتے ہیں۔
Selenium Wire کو ہیڈلیس کیسے چلائیں اور میموری کا استعمال کم کیسے رکھیں؟
ہیڈلیس موڈ اور استحکام کے لیے Chrome کے آپشنز شامل کریں، پھر Selenium Wire جو کچھ پکڑتا ہے اسے محدود کریں تاکہ درخواست کا بفر بغیر حد کے نہ بڑھے۔ سرورز پر، ہیڈلیس کے ساتھ محدود کیپچر اس سے وہی فرق پڑتا ہے جو گھنٹوں چلنے والے کام اور RAM ختم کر دینے والے کام کے درمیان ہوتا ہے۔
ہیڈلیس کنٹینر یا CI ماحول کے لیے Chrome فلیگز کے ایک قابل اعتماد سیٹ سے آغاز کریں:
from seleniumwire import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument("--headless=new") # modern headless mode
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--window-size=1920,1080")
proxy_url = "http://login:[email protected]:823"
seleniumwire_options = {
"proxy": {"http": proxy_url, "https": proxy_url,
"no_proxy": "localhost,127.0.0.1"}
}
driver = webdriver.Chrome(options=chrome_options,
seleniumwire_options=seleniumwire_options)
driver.get("https://api.ipify.org")
print(driver.find_element("tag name", "body").text)
driver.quit()
پہلے سے طے شدہ طور پر Selenium Wire ہر درخواست اور جواب کو پکڑ کر بفر میں رکھتا ہے، اور یہی وہ چیز ہے جو طویل رنز میں میموری استعمال کرتی ہے۔ driver.scopes سے کیپچر کو محدود کریں، اسٹوریج کو میموری میں رکھیں، اور صفحات کے درمیان بفر خالی کریں:
from seleniumwire import webdriver
seleniumwire_options = {
"proxy": {"http": proxy_url, "https": proxy_url,
"no_proxy": "localhost,127.0.0.1"},
"request_storage": "memory", # keep the buffer in RAM, not on disk
}
driver = webdriver.Chrome(seleniumwire_options=seleniumwire_options)
# Only capture the API traffic you care about. Images, fonts, analytics, and
# tracking pixels are ignored, which keeps the capture buffer small.
driver.scopes = [r".*/api/.*"]
driver.get("https://example.com/products")
for request in driver.requests:
print(request.url)
del driver.requests # clear the buffer between pages on long-running jobs
driver.quit()
scopes فہرست URL ریگولر ایکسپریشنز کی فہرست ہے؛ ان سے باہر کی ہر چیز گزر تو جاتی ہے مگر محفوظ نہیں کی جاتی۔ ایسے اسکریپر پر جسے صرف API جوابات درکار ہوں، یہ میموری میں موجود بفر کو نمایاں طور پر کم کر سکتا ہے۔ ڈاؤن لوڈ ہونے والا مواد کم کرنا پراکسی کی لاگت بھی گھٹاتا ہے، کیونکہ DataImpulse کی ٹریفک فی گیگا بائٹ بل کی جاتی ہے۔
Selenium Wire، HTTPS اور اس کے سرٹیفکیٹ کو کیسے سنبھالتا ہے؟
درخواست اور جواب کا انکرپٹڈ مواد پڑھنے کے لیے، Selenium Wire اپنے ہی روٹ سرٹیفکیٹ کے ذریعے man-in-the-middle کے طور پر HTTPS کو ڈیکرپٹ کرتا ہے، جسے وہ Chrome اور Firefox کے لیے براؤزر پروفائل میں خودکار طور پر شامل کر دیتا ہے۔ یہ طاقتور ہے لیکن اس کی کچھ واضح حدود ہیں جنہیں اس پر انحصار کرنے سے پہلے آپ کو سمجھنا چاہیے۔
from seleniumwire import webdriver
proxy_url = "http://login:[email protected]:823"
seleniumwire_options = {
"proxy": {"http": proxy_url, "https": proxy_url,
"no_proxy": "localhost,127.0.0.1"},
# Selenium Wire is a man-in-the-middle proxy: to read HTTPS bodies it
# decrypts traffic using its own root certificate, which it injects into
# the browser profile automatically. These two options relax verification
# on the upstream leg so a mismatched or self-signed cert does not abort.
"verify_ssl": False,
"suppress_connection_errors": True,
}
driver = webdriver.Chrome(seleniumwire_options=seleniumwire_options)
driver.get("https://example.com")
driver.quit()
man-in-the-middle ڈیزائن کے دو اہم نتائج ہیں۔ پہلی، جو سائٹ certificate pinning استعمال کرتی ہے وہ شامل کیا گیا سرٹیفکیٹ مسترد کر دے گی، اور اُس ٹریفک روکنا ناکام ہو جائے گی؛ ایسی صورت میں متاثرہ ہوسٹ کے لیے کیپچر بند کر دیں یا اس کے مواد کا معائنہ نہ کرنے پر اکتفا کریں۔ دوسری، اگر آپ Chrome کو کسی کسٹم یا غیر معمولی پروفائل کے ساتھ چلاتے ہیں تو ممکن ہے آپ کو یقینی بنانا پڑے کہ وہ پروفائل Selenium Wire کی CA پر اعتماد کرے۔ verify_ssl اور suppress_connection_errors آپشنز اپ اسٹریم مرحلے کو نرم کر دیتے ہیں تاکہ کوئی عجیب سرٹیفکیٹ رن کو روک نہ کرے، مگر یہ pinning کو شکست نہیں دیتے۔
کیا آپ undetected-chromedriver کو ساتھ استعمال کر سکتے ہیں، اور متبادل کیا ہیں؟
جی ہاں۔ Selenium Wire ایک undetected-chromedriver انضمام کے ساتھ آتا ہے جسے آپ seleniumwire.undetected_chromedriver کے طور پر import کرتے ہیں، جو آپ کو درخواستوں کا معائنہ اور تصدیق شدہ پراکسیز دیتا ہے جبکہ undetected-chromedriver آٹومیشن کے فنگر پرنٹس کم کرتا ہے۔ سخت دفاع رکھنے والے اہداف کے لیے یہ سب سے مقبول امتزاج ہے۔
# Selenium Wire ships its own undetected-chromedriver integration.
import seleniumwire.undetected_chromedriver as uc
proxy_url = "http://login:[email protected]:823"
seleniumwire_options = {
"proxy": {"http": proxy_url, "https": proxy_url,
"no_proxy": "localhost,127.0.0.1"}
}
options = uc.ChromeOptions()
options.add_argument("--headless=new")
driver = uc.Chrome(seleniumwire_options=seleniumwire_options, options=options)
driver.get("https://api.ipify.org")
print(driver.find_element("tag name", "body").text)
driver.quit()
جب Selenium Wire خود موزوں نہ ہو، تو دو متبادل زیادہ تر ضرورتیں پوری کر دیتے ہیں۔ سادہ Selenium 4 ایک چھوٹی سی تیار کردہ ایکسٹینشن کے ذریعے تصدیق شدہ پراکسیز استعمال کر سکتا ہے، جسے ایک معاون لائبریری خودکار بنا دیتی ہے:
from selenium import webdriver
# Plain Selenium cannot send proxy credentials on its own. A small helper builds
# a throwaway Chrome extension that answers the proxy auth challenge for you.
from selenium_authenticated_proxy import SeleniumAuthenticatedProxy
proxy = SeleniumAuthenticatedProxy(
proxy_url="http://login:[email protected]:823"
)
options = webdriver.ChromeOptions()
proxy.enrich_options(options)
driver = webdriver.Chrome(options=options)
driver.get("https://api.ipify.org")
print(driver.find_element("tag name", "body").text)
driver.quit()
Playwright تصدیق شدہ پراکسیز کو مقامی طور پر سنبھالتا ہے اور اس کی فعال دیکھ بھال ہوتی ہے، جو اسے نئے پروجیکٹس کے لیے بہتر بنیاد بناتا ہے:
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(
headless=True,
proxy={
"server": "http://gw.dataimpulse.com:823",
"username": "login",
"password": "password",
},
)
page = browser.new_page()
page.goto("https://api.ipify.org")
print(page.inner_text("body"))
browser.close()
خاص طور پر تصدیق شدہ پراکسی والے کام کے لیے تینوں کا موازنہ یوں ہے:
| ٹول | تصدیق شدہ پراکسی | درخواستوں کا معائنہ | دیکھ بھال | کس کے لیے بہترین |
|---|---|---|---|---|
| سادہ Selenium 4 | ایک تصدیقی ایکسٹینشن ہیلپر درکار ہے | نہیں | فعال | سادہ فلو، درخواست کی پکڑ نہیں |
| Selenium Wire | بلٹ اِن، ایک آپشن | درخواست اور جواب تک مکمل رسائی | آرکائیو شدہ، ورژن پن کریں | موجودہ Selenium کوڈ پر ڈیبگنگ اور ہیڈر کنٹرول |
| Playwright | بلٹ اِن، مقامی | روٹ اور جواب کو روکنا | فعال | نئے پروجیکٹس جو جدید ٹولنگ چاہتے ہیں |
منتقلی کے لیے مشورہ: اگر آپ کو صرف اسناد والی پراکسیز چاہئیں اور درخواست کی پکڑ نہیں، تو تصدیقی ایکسٹینشن کے ساتھ سادہ Selenium سب سے ہلکا حل ہے اور زیر نگہداشت کوڈ پر رہتا ہے۔ اگر آپ ٹریفک کے معائنے یا تبدیل کرنے پر انحصار کرتے ہیں اور نئے سرے سے شروع کر رہے ہیں، تو Playwright آپ کو یہ صلاحیتیں ورژن پن کرنے کے بوجھ کے بغیر مقامی طور پر دے دیتا ہے۔ Selenium Wire کو تب رکھیں جب آپ کے پاس ایک موجودہ Selenium کوڈ بیس ہو جس کا درخواست کی سطح کا کنٹرول دوبارہ بنانا مہنگا ثابت ہو۔ ان میں سے کسی بھی ٹول کے ساتھ IP چننے کے لیے، رہائشی پراکسیز، ڈیٹا سینٹر پراکسیز، اور موبائل پراکسیز کو اپنے ہدف کے دفاع کے مقابل جانچیں۔

اکثر پوچھے جانے والے سوالات
میں Selenium Wire میں تصدیق شدہ پراکسی کیسے سیٹ کروں؟
driver بناتے وقت seleniumwire_options کے اندر ایک پراکسی dict دیں جس میں http اور https کے URL login:password@host:port کی صورت میں ہوں، اور localhost کے لیے no_proxy شامل کریں۔ کسی ایکسٹینشن یا تصدیقی ڈائیلاگ کی ضرورت نہیں۔
Selenium Wire blinker کے ImportError کے ساتھ کیوں ناکام ہوتا ہے؟
blinker 1.8 نے ایک اندرونی نام ہٹا دیا جسے Selenium Wire شروع ہوتے وقت import کرتا ہے۔ blinker کو 1.8 سے نیچے پن کریں، مثلاً blinker==1.7.0، پن شدہ selenium-wire اور selenium ورژنز کے ساتھ۔
کیا Selenium Wire اب بھی زیر نگہداشت ہے؟
اصل پروجیکٹ آرکائیو کر دیا گیا ہے اور اب فعال طور پر اس کی دیکھ بھال نہیں ہوتی۔ یہ پن شدہ ورژنز کے ساتھ اب بھی چلتا ہے، مگر کسی بھی Selenium یا Chrome اپ گریڈ کو الگ تھلگ جانچیں، اور نئے پروجیکٹس کے لیے کسی دیکھ بھال شدہ فورک یا Playwright پر غور کریں۔
میں کیسے جانچوں کہ پراکسی واقعی استعمال ہو رہی ہے؟
driver میں api.ipify.org جیسی IP-echo سروس لوڈ کریں اور تصدیق کریں کہ واپس آنے والا پتہ پراکسی کا ہے، آپ کا اپنا نہیں۔ آپ driver.requests بھی پڑھ سکتے ہیں تاکہ دیکھ سکیں کہ ٹریفک گیٹ وے سے گزری ہے۔
کیا Selenium Wire، HTTPS ٹریفک پڑھ سکتا ہے؟
جی ہاں۔ یہ ایک man-in-the-middle پراکسی کے طور پر کام کرتا ہے اور HTTPS مواد کو ڈیکرپٹ کرنے کے لیے اپنا روٹ سرٹیفکیٹ داخل کرتا ہے۔ جو سائٹیں certificate pinning استعمال کرتی ہیں وہ اسے مسترد کر دیں گی، چنانچہ ان ہوسٹس کے لیے کیپچر بند کر دیں۔
DataImpulse کب مناسب انتخاب نہیں ہوتا؟
اگر آپ کو مستحکم ISP پراکسیز، مکمل طور پر منظم اسکریپنگ API، یا بینکنگ اور سرکاری سائٹس تک رسائی چاہیے، تو DataImpulse مناسب ٹول نہیں۔ یہ عوامی ڈیٹا اکٹھا کرنے اور مواد تک رسائی کے لیے گردشی رہائشی، موبائل اور ڈیٹا سینٹر پراکسیز پر توجہ دیتا ہے۔
قابل اعتماد پراکسیز کے ذریعے Selenium Wire چلائیں
Selenium Wire پراکسی اتنی ہی اچھی ہوتی ہے جتنے اس کے پیچھے موجود IP۔ آپ اپنی براؤزر آٹومیشن کو اخلاقی طور پر حاصل کیے گئے رہائشی، موبائل یا ڈیٹا سینٹر IP کے ذریعے 1 ڈالر فی GB سے شروع ہونے والی استعمال کے مطابق ادائیگی ٹریفک پر روٹ کر سکتے ہیں۔ ایک DataImpulse اکاؤنٹ بنائیں اور گردشی یا اسٹکی سیشنز سے آغاز کریں۔
