SeleniumBase چارچوبی برای آزمون است که روی Selenium ساخته شده و پروکسی را همراه با اطلاعات ورود میپذیرد. همین کاری است که Selenium بهتنهایی از پس آن برنمیآید، و به همین دلیل این دور زدن در هر کار اسکرپینگ ارزش دارد.
مشکل پروکسی در Selenium
Selenium میتواند پروکسی تعیین کند، اما نمیتواند به آن وارد شود: Chrome نام کاربری و رمز را در آرگومان --proxy-server نادیده میگیرد و بهجایش پنجره ورودی باز میکند که WebDriver نمیتواند پرش کند. ابزاری که پیشتر این شکاف را پر میکرد، یعنی SeleniumWire، مدتهاست نگهداری نمیشود و دیگر پیشنهاد نمیشود.
گامهای نخست
نصب
pip install seleniumbaseیک مورد آزمون
آزمون زیر اطلاعات JSON سرویس IPinfo را میگیرد و در کنسول مینویسد؛ اینطور بیدرنگ میبینید چه آدرسی به بیرون دیده میشود.
from seleniumbase import BaseCase
from selenium.webdriver.common.by import By
import json
class ProxyTest(BaseCase):
def test_proxy(self):
# open the page
self.driver.get("https://ipinfo.io/json")
# read the JSON response
location_info = json.loads(self.driver.find_element(By.TAG_NAME, "body").text)
# print the contents
for k, v in location_info.items():
print(f"{k}: {v}")اجرای آزمون
اجرا با pytest انجام میشود.
بدون پروکسی
pytest proxy_test.py -sدر کنسول IP و موقعیت خودتان نمایش داده میشود.
با پروکسی
pytest proxy_test.py --proxy=USERNAME:PASSWORD@pr.proxynet.io:8000 -sنام کاربری، رمز، نام میزبان و پورت در پنل Proxynet شما هست. خروجی چیزی شبیه این میشود:
=================================== test session starts ===================================
platform linux -- Python 3.10.12, pytest-8.3.4, pluggy-1.5.0
plugins: seleniumbase-4.34.6, rerunfailures-15.0, xdist-3.6.1
collected 1 item
proxy_test.py ip: 144.202.4.246
hostname: 144-202-4-246.pxnet.io
city: Piscataway
region: New Jersey
country: US
timezone: America/New_York
.
==================================== 1 passed in 3.25s ====================================آدرس عوض شده و هیچ پنجره ورودی هم باز نشده است؛ هدف همین بود.
چرخاندن پروکسیها
با همان امکانات پایه Python میتوانید یک چرخش ساده بسازید. اسکریپت زیر همان آزمون را برای هر کشور یک بار اجرا میکند:
import subprocess
USER = "USERNAME"
PASSWORD = "PASSWORD"
# countries the request should come from
countries = ["us", "de", "gb", "tr"]
for country in countries:
# with Proxynet the target country goes inside the username
proxy = f"{USER}-country-{country}:{PASSWORD}@pr.proxynet.io:8000"
subprocess.run(f"pytest proxy_test.py --proxy={proxy} -s", shell=True)شکل دقیق نوشتن کشور مقصد در پنل شما آمده و بسته به محصول فرق میکند. اینکه همین کار را بهجای خط فرمان داخل خود اسکریپت چطور انجام دهید، در نوشته چرخاندن پروکسی در Python توضیح دادهایم.
جمعبندی
با SeleniumBase یک آزمون Selenium از مسیر پروکسی با احراز هویت میرود، موقعیت دیدهشده را بررسی میکند و آن را میان اجراها عوض میکند؛ سه کاری که با Selenium تنها بهمراتب دشوارتر است.
کدام محصولات پروکسی ما برای این کار مناسباند:




