ProxynetProxynet

پروکسی با SeleniumBase: احراز هویت و چرخش

تاریخ انتشار:

2 دقیقه مطالعه

Acar Diveroli
نویسنده: Acar Diveroli
پروکسی با SeleniumBase

SeleniumBase چارچوبی برای آزمون است که روی Selenium ساخته شده و پروکسی را همراه با اطلاعات ورود می‌پذیرد. همین کاری است که Selenium به‌تنهایی از پس آن برنمی‌آید، و به همین دلیل این دور زدن در هر کار اسکرپینگ ارزش دارد.

مشکل پروکسی در Selenium

Selenium می‌تواند پروکسی تعیین کند، اما نمی‌تواند به آن وارد شود: Chrome نام کاربری و رمز را در آرگومان --proxy-server نادیده می‌گیرد و به‌جایش پنجره ورودی باز می‌کند که WebDriver نمی‌تواند پرش کند. ابزاری که پیش‌تر این شکاف را پر می‌کرد، یعنی SeleniumWire، مدت‌هاست نگهداری نمی‌شود و دیگر پیشنهاد نمی‌شود.

گام‌های نخست

نصب

bash
pip install seleniumbase

یک مورد آزمون

آزمون زیر اطلاعات JSON سرویس IPinfo را می‌گیرد و در کنسول می‌نویسد؛ این‌طور بی‌درنگ می‌بینید چه آدرسی به بیرون دیده می‌شود.

python
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 انجام می‌شود.

بدون پروکسی

bash
pytest proxy_test.py -s

در کنسول IP و موقعیت خودتان نمایش داده می‌شود.

با پروکسی

bash
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 می‌توانید یک چرخش ساده بسازید. اسکریپت زیر همان آزمون را برای هر کشور یک بار اجرا می‌کند:

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 تنها به‌مراتب دشوارتر است.

کدام محصولات پروکسی ما برای این کار مناسب‌اند:

پرسش از ChatGPTپرسش از Claude