SeleniumBase에서 프록시 사용 방법

제한을 우회하고 웹 스크래핑 성공률을 높이기 위해 인증된 프록시를 사용해 SeleniumBase를 설정하세요.
3 분 읽기
How to Use Proxies With SeleniumBase blog image

SeleniumBase는 테스트 환경에서 Selenium 인스턴스를 실행하기 위한 래퍼로 설계되었습니다. 그러나 단순한 래퍼 이상의 기능을 제공합니다. SeleniumBase를 사용하면 인증된 프록시를 통해 Selenium을 실행할 수 있습니다.

셀레늄의 내재적 프록시 문제점

Selenium은 프록시 지원이 매우 취약합니다. Selenium에 --proxy-server 인수를 전달할 수는 있지만 인증된 프록시 지원은 없습니다. 문제는 더 심각해집니다. 수년간 SeleniumWire는 Selenium에서 프록시를 사용할 때 가장 선호되는 옵션이었습니다. 통합이 매우 쉬웠죠. 안타깝게도 SeleniumWire는 1년 이상 전에 사용 중단되었으며 2년 넘게 업데이트가 이루어지지 않았습니다.

SeleniumWire Deprecation

시작하기

시작하려면 SeleniumBase를 설치하고 테스트 케이스를 작성해야 합니다. 테스트 케이스는 실제로 Selenium을 제어하고 웹드라이버 인스턴스를 실행하는 역할을 합니다.

설치

pip install seleniumbase

테스트 케이스 작성

다음은 간단한 테스트 케이스입니다. 아래 코드는 IPinfo API에 요청을 보냅니다. JSON 응답을 수신하면 이를 파싱하여 내용을 콘솔에 출력합니다.

from seleniumbase import BaseCase
from selenium.webdriver.common.by import By
import json

class ProxyTest(BaseCase):
   def test_proxy(self):
        # 사이트로 이동
        self.driver.get("https://ipinfo.io/json")
      
        #json 응답 로드
        location_info = json.loads(self.driver.find_element(By.TAG_NAME, "body").text)

        #사전(dict) 반복 처리 및 내용 출력
        for k,v in location_info.items():
            print(f"{k}: {v}")

테스트 실행

코드를 실제로 실행하려면 테스트를 실행해야 합니다. python name_of_your_script.py 대신 pytest를 사용할 것입니다.

프록시 없이 실행

프록시 없이 테스트 스크립트를 실행하려면 아래 명령어를 사용하세요.

pytest proxy_test.py -s

다음과 유사한 응답을 받게 됩니다.

=================================================== test session starts ===================================================
platform linux -- Python 3.10.12, pytest-8.3.4, pluggy-1.5.0
rootdir: /home/nultinator/clients/bright-data/seleniumbase-proxies
plugins: html-4.0.2, metadata-3.1.1, anyio-4.0.0, seleniumbase-4.34.6, ordering-0.6, rerunfailures-15.0, xdist-3.6.1
1개 항목 수집                                                                                                          

proxy_test.py ip: 23.28.108.255
hostname: d28-23-255-108.dim.wideopenwest.com
city: Westland
region: Michigan
country: US
loc: 42.3242,-83.4002
조직: AS12083 WideOpenWest Finance LLC
우편번호: 48185
시간대: America/Detroit
참고: https://ipinfo.io/missingauth.


==================================================== 1개 항목 통과, 소요 시간 1.01초 ====================================================

프록시 구성

프록시를 사용하려면 --proxy 플래그 뒤에 프록시 URL을 입력하면 됩니다. 아래 형식을 참고하세요.

--proxy=사용자_프록시_URL:사용자_프록시_포트

무료 프록시

무료 프록시를 사용하는 예시입니다. IP 주소는 155.54.239.64이며 포트 80을 통해 통신합니다.

--proxy=155.54.239.64:80

인증 프록시

인증된 프록시도 동일한 방식으로 처리됩니다. 인증된 프록시의 경우 URL에 사용자 이름과 비밀번호를 포함시키기만 하면 됩니다.

proxy=<사용자_이름>:<비밀번호>@<프록시_URL>:<프록시_포트>

최적의 인증 프록시 유형 및 제공업체

Selenium에서 인증 프록시를 사용할 때 가장 좋은 옵션은 주거용 프록시, 데이터센터 프록시, ISP 프록시로, 각각 다른 수준의 익명성과 안정성을 제공합니다. 주거용 프록시는 실제 사용자 IP를 사용해 가장 높은 성공률을 제공하므로 봇 탐지를 우회하는 데 이상적입니다. 데이터센터 프록시는 더 빠르고 비용 효율적이지만 탐지되기 쉽습니다. ISP 프록시는 두 가지의 장점을 결합하여 높은 신뢰도와 함께 속도를 제공합니다.

추천 공급업체:

  • 지리적 타겟팅
  • 회전 프록시

SeleniumBase 스크래핑에는 Bright Data의 주거용 프록시가 가장 안정적인 옵션으로, 높은 성공률과 최소한의 차단률을 보장합니다.

프록시 사용 설정

아래 예시는 Bright Data의 프록시 중 하나로 실행되도록 구성되었습니다. 사용자 이름, 지역 이름, 비밀번호를 본인의 것으로 반드시 교체하십시오.

pytest proxy_test.py --proxy=brd-customer-<사용자 이름>-zone-<지역 이름>:<비밀번호>@brd.superproxy.io:33335 -s

실행 시 다음과 같은 출력이 표시됩니다. 자세히 보면 위치가 변경된 것을 확인할 수 있습니다.

=================================================== 테스트 세션 시작 ===================================================
플랫폼 linux -- Python 3.10.12, pytest-8.3.4, pluggy-1.5.0
rootdir: /home/nultinator/clients/bright-data/seleniumbase-proxies
plugins: html-4.0.2, metadata-3.1.1, anyio-4.0.0, seleniumbase-4.34.6, ordering-0.6, rerunfailures-15.0, xdist-3.6.1
수집된 항목 1개                                                                                                          

proxy_test.py ip: 144.202.4.246
hostname: 144-202-4-246.lum-int.io
city: Piscataway
region: New Jersey
country: US
loc: 40.4993,-74.3990
조직: AS20473 The Constant Company, LLC
우편번호: 08854
시간대: America/New_York
참고: https://ipinfo.io/missingauth.


==================================================== 1개 항목 3.25초 만에 통과 ====================================================

위치 제어

당사 프록시를 사용하면 위치까지 선택할 수 있습니다. 국가 플래그를 사용하여 설정할 수 있습니다. 각 국가에는 두 글자 국가 코드가 있으며, 이를 프록시에 전달하면 됩니다.

pytest proxy_test.py --proxy=brd-customer-<사용자명>-zone-<지역명>:<비밀번호>[email protected]:33335 -s

국가 코드로 es (스페인)를 사용하면 스페인에 위치한 프록시를 통해 연결됩니다. 아래 출력에서 이를 확인할 수 있습니다.

=================================================== 테스트 세션 시작 ===================================================
플랫폼 linux -- Python 3.10.12, pytest-8.3.4, pluggy-1.5.0
rootdir: /home/nultinator/clients/bright-data/seleniumbase-proxies
plugins: html-4.0.2, metadata-3.1.1, anyio-4.0.0, seleniumbase-4.34.6, ordering-0.6, rerunfailures-15.0, xdist-3.6.1
수집된 항목 1개                                                                                                          

proxy_test.py ip: 176.119.14.158
city: Paracuellos de Jarama
region: Madrid
country: ES
loc: 40.5035,-3.5278
조직: AS203020 HostRoyale Technologies Pvt Ltd
우편번호: 28860
시간대: Europe/Madrid
참고: https://ipinfo.io/missingauth.


==================================================== 1개 통과, 소요 시간 3.98초 ====================================================

지리적 위치 정보 문서는 여기에서 확인하실 수 있습니다.

회전 프록시

파이썬 기본만으로도 꽤 괜찮은 프록시 시스템을 만들 수 있습니다. 아래 코드에서는 국가 코드 집합을 사용하지만, 실제 프록시 IP로 쉽게 대체할 수 있습니다. countries는 국가 코드 목록을 담고 있습니다. 이후 이를 순회하며 네 국가 코드 모두를 사용해 프록시 테스트를 실행합니다.

  • us: 미국
  • es: 스페인
  • il: 이스라엘
  • gb: 영국
import subprocess

#국가 코드 목록
countries = [
    "us",
    "es",
    "il",
    "gb",
]

#국가별로 셸 명령어 생성
for country in countries:
    command = f"pytest proxy_test.py --proxy=brd-customer-<YOUR-USERNAME>-<YOUR-ZONE-NAME>-country-{country}:[email protected]:33335 -s"

    # 셸 명령어 실행
    subprocess.run(command, shell=True)

이 파일을 일반 Python 파일로 실행할 수 있습니다.

python rotate_proxies.py

코드를 실행하면 다음과 유사한 출력이 표시됩니다.

(Linux는 기본적으로 --headless를 사용합니다. 재정의하려면 --headed / --gui를 사용하세요. 대신 Xvfb 모드를 사용하려면 --xvfb를 사용하세요. 또는 --headless / --headless2 / --uc를 사용하여 이 정보를 숨길 수 있습니다.)
=================================================== 테스트 세션 시작 ===================================================
플랫폼 linux -- Python 3.10.12, pytest-8.3.4, pluggy-1.5.0
루트 디렉토리: /home/nultinator/clients/bright-data/seleniumbase-proxies
플러그인: html-4.0.2, metadata-3.1.1, anyio-4.0.0, seleniumbase-4.34.6, ordering-0.6, rerunfailures-15.0, xdist-3.6.1
수집된 항목: 1개                                                                                                          

proxy_test.py ip: 164.90.142.33
city: Clifton
region: New Jersey
country: US
loc: 40.8344,-74.1377
조직: AS14061 DigitalOcean, LLC
우편번호: 07014
시간대: America/New_York
readme: https://ipinfo.io/missingauth.


==================================================== 1개 통과, 소요 시간 3.84초 ====================================================
(Linux는 기본적으로 --headless를 사용합니다. 재정의하려면 --headed / --gui를 사용하세요. Xvfb 모드를 사용하려면 --xvfb를 사용하십시오. 또는 --headless / --headless2 / --uc를 사용하여 이 정보를 숨길 수 있습니다.)
=================================================== 테스트 세션 시작 ===================================================
플랫폼 linux -- Python 3.10.12, pytest-8.3.4, pluggy-1.5.0
루트 디렉토리: /home/nultinator/clients/bright-data/seleniumbase-proxies
플러그인: html-4.0.2, metadata-3.1.1, anyio-4.0.0, seleniumbase-4.34.6, ordering-0.6, rerunfailures-15.0, xdist-3.6.1
1개 항목 수집                                                                                                          

proxy_test.py ip: 5.180.9.15
city: Madrid
region: Madrid
country: ES
loc: 40.4066,-3.6724
조직: AS203020 HostRoyale Technologies Pvt Ltd
우편번호: 28007
시간대: Europe/Madrid
readme: https://ipinfo.io/missingauth.


==================================================== 1개 통과, 소요 시간 3.60초 ====================================================
(Linux는 기본적으로 --headless를 사용합니다. 재정의하려면 --headed / --gui를 사용하세요. Xvfb 모드를 사용하려면 --xvfb를 사용하십시오. 또는 --headless / --headless2 / --uc를 사용하여 이 정보를 숨길 수 있습니다.)
=================================================== 테스트 세션 시작 ===================================================
플랫폼 linux -- Python 3.10.12, pytest-8.3.4, pluggy-1.5.0
루트 디렉토리: /home/nultinator/clients/bright-data/seleniumbase-proxies
플러그인: html-4.0.2, metadata-3.1.1, anyio-4.0.0, seleniumbase-4.34.6, ordering-0.6, rerunfailures-15.0, xdist-3.6.1
1개 항목 수집됨                                                                                                          

proxy_test.py ip: 64.79.233.151
city: Tel Aviv
region: Tel Aviv
country: IL
loc: 32.0809,34.7806
조직: AS9009 M247 Europe SRL
시간대: Asia/Jerusalem
참고: https://ipinfo.io/missingauth.


==================================================== 1개 통과 (소요 시간 3.36초) ====================================================
(Linux는 기본적으로 --headless 모드를 사용합니다. 이를 변경하려면 --headed / --gui를 사용하세요. Xvfb 모드를 사용하려면 --xvfb를 사용하십시오. 또는 --headless / --headless2 / --uc를 사용하여 이 정보를 숨길 수 있습니다.)
=================================================== 테스트 세션 시작 ===================================================
플랫폼 linux -- Python 3.10.12, pytest-8.3.4, pluggy-1.5.0
루트 디렉토리: /home/nultinator/clients/bright-data/seleniumbase-proxies
플러그인: html-4.0.2, metadata-3.1.1, anyio-4.0.0, seleniumbase-4.34.6, ordering-0.6, rerunfailures-15.0, xdist-3.6.1
1개 항목 수집                                                                                                          

proxy_test.py ip: 185.37.3.107
city: London
region: England
country: GB
loc: 51.5085,-0.1257
조직: AS9009 M247 Europe SRL
우편번호: E1W
시간대: Europe/London
참고: https://ipinfo.io/missingauth.


==================================================== 1개 통과, 소요 시간 2.90초 ====================================================

보시다시피, 아주 적은 양의 코드로 미국, 스페인, 이스라엘, 영국에 있는 프록시를 제어하고 있습니다.

결론

웹 스크래핑 시 SeleniumBase는 많은 사람들이 불가능하다고 여기는 Selenium의 기능을 확장합니다. 본 가이드를 통해 프록시 설정, 지리적 위치 제어, 프록시 로테이션 방법까지 익히셨을 것입니다. 이러한 도구들은 대부분의 차단 메커니즘을 우회하는 데 도움이 될 것입니다.

Bright Data의 업계 최고 수준의 프록시 서비스로 Selenium 기반 스크래핑의 모든 잠재력을 발휘하세요. 지금 무료 체험을 시작하고 대규모로 원활하고 안정적인 데이터 수집을 경험해 보십시오!