Seleniumの練習 : 試しにtestnet Faucetから自動でtestnet tokenをリクエスト

# Seleniumの練習 : 試しにtestnet Faucetから自動でtestnet token をリクエスト

テストネット環境で開発を進める際、テスト用のtokenが必要になります。testnet Faucetサイトは、テストネットtokenを提供してくれる便利なツールですが、手動でリクエストを行うのは時間がかかります。この記事では、PythonとSeleniumを使用して、testnet Faucetから自動でtestnet tokenをリクエストする方法を紹介します。

# 必要な準備

*   Pythonのインストール
*   Seleniumライブラリのインストール
*   Chrome WebDriverのダウンロードとセットアップ
*   あなたのEthereum Walletアドレス

# 自動リクエストスクリプトの作成

使用に当たっての注意点も理解しておくことが重要です。

## 使用に当たっての注意

*   **セキュリティ**: 自動化スクリプトにウォレットアドレスを含めることは安全ですが、秘密鍵やパスワードなどの機密情報は絶対に含めないでください。
*   **利用規約の遵守**: 自動リクエストは、Faucetの利用規約に違反しないようにしてください。高頻度でのアクセスはサービスに負荷をかけ、アクセス制限やアカウントの禁止につながることがあります。
*   **ロボット検証**: いくつかのFaucetサイトでは、「私はロボットではありません」のキャプチャ認証が必要です。これは自動化できないため、スクリプトでは最後にブラウザを開いた状態にして手動で認証を行う必要があります。
*   **パフォーマンス**: Seleniumはブラウザの実際のインスタンスを操作するため、リソースを多く消費します。スクリプトの実行中は、システムのパフォーマンスに影響が出る可能性があるため、必要に応じてリソースの監視を行ってください。

***

# コード

#### コード例

```python
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
import time

# Chromeオプションの設定
options = webdriver.ChromeOptions()
options.add_argument('--user-data-dir=<あなたのユーザーデータディレクトリへのパス>')  
# 例: 'C:\\Users\\YourName\\AppData\\Local\\Google\\Chrome\\User Data'

# Chromeドライバーのパスを指定
driver_path = "<あなたのChromeドライバーへのパス>"  # 例: 'C:\\path\\to\\your\\chromedriver.exe'

# WebDriverサービスの設定
service = Service(executable_path=driver_path)

# Chromeドライバーの起動
driver = webdriver.Chrome(service=service, options=options)

# フォーセットウェブサイトのリスト
faucet_urls = [
    "https://www.alchemy.com/faucets/base-sepolia",
    "https://www.alchemy.com/faucets/polygon-mumbai"
]

# 指定されたウェブサイトでtokenをリクエスト
for url in faucet_urls:
    driver.get(url)
    time.sleep(3)  # ページ読み込み待ち
    input_element = driver.find_element(By.CLASS_NAME, "alchemy-faucet-panel-input-text")
    input_element.send_keys("<あなたのウォレットアドレス>")  # 例: '0x123...'
    submit_button = driver.find_element(By.CLASS_NAME, "alchemy-faucet-button")
    submit_button.click()
    time.sleep(30)  # リクエスト後の待機時間

# 新しいタブで開くウェブサイト
new_tab_urls = [
    "https://www.alchemy.com/faucets/ethereum-goerli",
    "https://www.alchemy.com/faucets/ethereum-sepolia"
]

# 新しいタブで指定されたウェブサイトを開く
for url in new_tab_urls:
    driver.execute_script("window.open('');")  # 新しいタブを開く
    driver.switch_to.window(driver.window_handles[-1])  # 最後に開いたタブに切り替え
    driver.get(url)
    time.sleep(3)  # ページ読み込み待ち
    input_element = driver.find_element(By.CLASS_NAME, "alchemy-faucet-panel-input-text")
    input_element.send_keys("<あなたのウォレットアドレス>")  # 例: '0x123...'


# スクリプト実行が終了してもブラウザを開いたままにする
input("Press Enter to close the browser...")
driver.quit()

```

このPythonスクリプトは、Seleniumを使って複数のtestnet Faucetウェブサイトから自動でtokenをリクエストするプロセスを自動化するものです。各部分の機能と目的を詳細に説明します。

### 必要なライブラリのインポート

*   `webdriver`: Seleniumでブラウザを自動操作するための主要なインターフェースです。
*   `Service`: Selenium 4以降でWebDriverサービスを管理するためのクラスです。
*   `By`: WebElementを検索する際に使用するメソッドの種類を指定します。
*   `time`: スクリプトの実行を一時的に停止するために使用します（ページのロード完了などを待機する場合）。

### Chromeオプションの設定

`webdriver.ChromeOptions()`を使用してChromeブラウザの設定をカスタマイズします。ここでは、`--user-data-dir`オプションを使用して既存のユーザープロファイル（ブックマークやログイン情報を含む）をSeleniumセッションで利用するよう指定しています。

### Chromeドライバーのパス指定とWebDriverサービスの設定

SeleniumがChromeブラウザを自動制御するために必要なChrome WebDriverの場所を指定し、`Service`クラスを使用してWebDriverサービスを設定します。

### Chromeドライバーの起動

設定したオプションとサービスをもとに、SeleniumのChromeドライバーインスタンスを起動します。これにより、スクリプトからブラウザを操作できるようになります。

### testnet Faucetウェブサイトへのアクセスとtokenリクエスト

指定されたtestnet Faucetウェブサイトのリストに対してループを回し、各サイトにアクセスしてtokenをリクエストします。これには、サイトにアクセスした後、ウォレットアドレスを入力するテキストフィールドを特定し、ウォレットアドレスを入力して送信ボタンをクリックします。各リクエスト後には、処理完了を待機するために一定時間待機します。

### 新しいタブでのウェブサイト操作

さらに、指定された他のFaucetウェブサイトを新しいタブで開きます。これはJavaScriptの`window.open('')`コマンドを実行して新しいタブを開き、そのタブに切り替えてから、指定されたURLにアクセスすることで実現されます。新しいタブでウェブサイトにアクセスした後、同様にウォレットアドレスを入力します。

### ブラウザのクローズ待機

スクリプト実行が終了しても、`input("Press Enter to close the browser...")`によりユーザーの入力を待つことでブラウザを開いたままに保持します。これにより、ユーザーがブラウザを手動で閉じるタイミングを選択できます。

このスクリプトは、Ethereum開発者がテストネットワークで使用するETHを効率的にリクエストするための自動化ツールを提供します。しかし、自動化ツールの使用は、対象ウェブサイトの利用規約に違反しないよう注意が必要です。また、キャプチャなどの自動化できない認証が必要な場合は、手動で対応する必要があります。

***

# まとめ

Seleniumを使用した自動化は、繰り返しのウェブタスクを効率化する強力な方法です。testnet Faucetからのtokenリクエスト自動化は、開発者がテストネット環境でスムーズに作業を進められるようにするための一例です。ただし、自動化を行う際は、常にセキュリティとサービスの利用規約を念頭に置き、責任を持って使用してください。


![](https://pbs.twimg.com/media/GHqkIooakAAl03c?format=jpg&name=small)