SeleniumBaseでのプロキシ使用方法

SeleniumBaseを認証済みプロキシで設定し、制限を回避してウェブスクレイピングの成功率を高めましょう。
3 分読
How to Use Proxies With SeleniumBase blog image

SeleniumBaseは、テスト環境でSeleniumインスタンスを実行するためのラッパーとして設計されています。とはいえ、単なるラッパー以上の機能を備えています。SeleniumBaseを使用すると、認証済みプロキシを介してSeleniumを実行できます。

Seleniumに内在するプロキシの問題

Seleniumのプロキシサーバーサポートは十分とは言えません。--proxy-server引数を渡すことは可能ですが、認証が必要なプロキシはサポートされていません。さらに深刻なのは、長年Seleniumとプロキシを連携させる主要手段だったSeleniumWireが、1年以上前に非推奨となり、2年以上更新されていないことです。

SeleniumWire Deprecation

はじめに

まず、SeleniumBase をインストールし、テストケースを作成する必要があります。テストケースは実際に Selenium を制御し、WebDriver インスタンスを実行する役割を担います。

インストール

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)

        #辞書を反復処理し内容を印刷
        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-プロキシ
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: ウェストランド
region: ミシガン州
country: 米国
loc: 42.3242,-83.4002
組織: AS12083 WideOpenWest Finance LLC
郵便番号: 48185
タイムゾーン: America/Detroit
readme: https://ipinfo.io/missingauth.


==================================================== 1 項目が 1.01 秒で通過 ====================================================

プロキシ設定

プロキシを使用するには、--proxy フラグに続いてプロキシの URL を指定するだけです。以下の形式を参照してください。

--proxy=プロキシURL:プロキシポート

無料プロキシ

無料プロキシの使用例です。IPアドレスは155.54.239.64ポート80で通信します。

--プロキシ=155.54.239.64:80

認証プロキシ

認証プロキシも同様の方法で扱います。認証プロキシを使用する場合、URLにユーザー名とパスワードを含めるだけです。

プロキシ=<YOUR_USERNAME>:<YOUR_PASSWORD>@<PROXY_URL>:<PROXY_PORT>

最適な認証プロキシの種類とプロバイダー

Seleniumで認証プロキシを使用する場合、最適な選択肢はレジデンシャルプロキシデータセンター・プロキシISPプロキシです。それぞれ異なるレベルの匿名性と信頼性を提供します。 レジデンシャルプロキシは実際のユーザーIPを使用するため成功率が最も高く、ボット検知回避に最適です。データセンター・プロキシは高速でコスト効率が良い反面、検知されやすい特徴があります。ISPプロキシは両者の利点を兼ね備え、高速性と高い信頼性を提供します。

推奨プロバイダー:

  • 地域ターゲティング
  • ローテーションプロキシ

SeleniumBaseによるスクレイピングには、Bright Dataのレジデンシャルプロキシが最も信頼性の高い選択肢であり、高い成功率と最小限のブロックを保証します。

プロキシを使用した実行

以下の例は、Bright Dataのプロキシを使用して実行するように設定されています。ユーザー名、ゾーン名、パスワードはご自身のものに置き換えてください。

pytest プロキシテスト.py --proxy=brd-customer-<YOUR-USERNAME>-zone-<YOUR-ZONE-NAME>:<YOUR-PASSWORD>@brd.superproxy.io:33335 -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-プロキシ
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
readme: https://ipinfo.io/missingauth.


==================================================== 1 項目が 3.25 秒で通過 ====================================================

位置情報の制御

当社のプロキシでは、位置情報を選択することも可能です。フラグを使用することで実現できます。各国には2文字の国コードがあり、これをプロキシに渡すことで設定できます。

pytest プロキシテスト.py --proxy=brd-customer-<YOUR-USERNAME>-ゾーン-<YOUR-ZONE-NAME>:<YOUR-PASSWORD>[email protected]:33335 -s

国コードとしてes(スペイン)を使用すると、スペインのプロキシ経由でルーティングされます。以下の出力でこれを確認できます。

=================================================== test session starts ===================================================
platform linux -- Python 3.10.12, pytest-8.3.4, pluggy-1.5.0
rootdir: /home/nultinator/clients/bright-data/seleniumbase-プロキシ
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
readme: https://ipinfo.io/missingauth.


==================================================== 1 項目が 3.98 秒で通過 ====================================================

当社の地理位置情報ドキュメントはこちらでご覧いただけます。

ローテーションプロキシ

Pythonの基本知識さえあれば、かなり優れたプロキシシステムを構築できます。以下のコードでは国コードのセットを使用していますが、実際のプロキシIPと簡単に置き換え可能です。countriesには国コードのリストを保持しています。これらを順に処理し、4つの国コード全てでプロキシテストを実行します。

  • 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-ゾーン-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を使用してこの情報を非表示にすることもできます。)
=================================================== test session starts ===================================================
platform linux -- Python 3.10.12, pytest-8.3.4, pluggy-1.5.0
rootdir: /home/nultinator/clients/bright-data/seleniumbase-プロキシ
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: 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 でこの情報を非表示にできます。)
=================================================== テストセッション開始 ===================================================
platform linux -- Python 3.10.12, pytest-8.3.4, pluggy-1.5.0
rootdir: /home/nultinator/clients/bright-data/seleniumbase-プロキシ
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: 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でこの情報を非表示にできます。)
=================================================== テストセッション開始 ===================================================
platform linux -- Python 3.10.12, pytest-8.3.4, pluggy-1.5.0
rootdir: /home/nultinator/clients/bright-data/seleniumbase-プロキシ
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: 64.79.233.151
city: Tel Aviv
region: Tel Aviv
country: IL
loc: 32.0809,34.7806
組織: AS9009 M247 Europe SRL
タイムゾーン: Asia/Jerusalem
readme: https://ipinfo.io/missingauth.


==================================================== 1 項目が 3.36 秒で通過 ====================================================
(Linux はデフォルトで --headless を使用します。上書きするには --headed / --gui を使用してください。 Xvfbモードを使用する場合は--xvfbを指定。または--headless / --headless2 / --ucでこの情報を非表示にできます。)
=================================================== テストセッション開始 ===================================================
platform linux -- Python 3.10.12, pytest-8.3.4, pluggy-1.5.0
rootdir: /home/nultinator/clients/bright-data/seleniumbase-プロキシ
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: 185.37.3.107
city: London
region: England
country: GB
loc: 51.5085,-0.1257
組織: AS9009 M247 Europe SRL
郵便番号: E1W
タイムゾーン: Europe/London
readme: https://ipinfo.io/missingauth.


==================================================== 1 項目が 2.90 秒で通過 ====================================================

ご覧の通り、ごくわずかなコードで米国、スペイン、イスラエル、英国にあるプロキシを制御しています。

結論

ウェブスクレイピングにおいて、SeleniumBaseは多くの人が不可能と考えているSeleniumの機能を実現します。このガイドでは、プロキシの設定方法、地理的位置の制御方法、さらにはローテーションプロキシの方法まで学んできました。これらのツールは、遭遇するほとんどのブロック機構を回避するのに役立ちます。

Bright Dataの業界をリードするプロキシサービスで、Seleniumベースのスクラッピングの真の力を解き放ちましょう。今すぐ無料トライアルを開始し、シームレスで信頼性の高い大規模データ収集を体験してください!