Seleniumを使うときの基本設定Tipsまとめ

Seleniumを使うときの基本設定Tipsまとめ

 seleniumを使うときに「大体どんなスクリプトにも入れる基本設定」をまとめてみた。

 サンプルコードはpythonだが、他言語でもseleniumは同じなので使えるはず。

ChromeDriverManagerで自動でChromeのバージョンに合うWebDriverをダウンロードして使える

 Seleniumを使うときに、ライブラリ『webdriver-manager』を使うと、自動でChromeのバージョンに合うWebDriverをインストールして管理できる。これにより毎回手動でChromeDriverをダウンロード・設定する手間が省ける。

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

# 自動でChromeのバージョンに合ったWebDriverを取得して起動
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

driver.get("https://www.google.com")
print(driver.title)
driver.quit()

 もし手動でやる場合は、ローカルにインストールしてあるchromeのバージョンを確認して、それと会うdriverを以下からインストールしてpathを通す必要があるので面倒くさい。

Chrome for Testing availability

サーバーログにSeleniumによる操作を知らせたくない場合はUser-Agentを設定する

 Seleniumのデフォルト設定では、アクセスするサーバー側のログに「自動操作」の痕跡が残ることがある。これを防ぐために、User-Agentを一般的なブラウザのものに変更すると、手動操作と区別されにくくなる。

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager

# User-Agentの設定(通常のブラウザと同じものに変更)
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"

options = Options()
options.add_argument(f"--user-agent={user_agent}")

# ChromeDriverの起動
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)

driver.get("https://www.google.com")
print(driver.execute_script("return navigator.userAgent;")) # 設定が反映されたか確認
driver.quit()

 user-agentの値はブラウザの更新によって変わるので、ホンモノの最新の値を確認するには開発者ツールで確認する。

navigator.userAgent

 ブラウザの開発者ツールで上記を入力するとわかる。

User-Agentをランダムに設定してアクセスログの中で目立たないようにする

 実行ごとに同じuser-agentを使っていると、アクセスログの中で目立つ可能性があるので、実行ごとにuser-agentを変えてやると目立ちにくい。(ハズ。

# User-Agent リスト
USER_AGENTS= [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
]
# User-Agentをランダムに選択
random_user_agent = random.choice(USER_AGENTS)
options.add_argument(f"user-agent={random_user_agent}")

Time.sleepを入れてアクセスの間隔をバラバラにする

 アクセスの間隔が同じだと自動操作っぽいので、アクセスする処理の手前あたりに以下を置いておくと、機械的にランダムが作れる。

Time.sleep(random.uniform(10, 20))

Selenium起動時のadd_argumentで入れておくと便利なオプション

 SeleniumのChromeオプションには、便利な設定がある。これらをadd_argumentで設定しておくと、動作が安定しやすくなる。

おすすめオプション一覧

オプション名 説明
--headless=new GUIなしでバックグラウンド実行(ヘッドレスモード)
--disable-gpu GPUアクセラレーションを無効化(Linux環境の安定性向上)
--window-size=1920x1080 ウィンドウサイズを指定(レスポンシブ対応サイトで有効)
--disable-popup-blocking ポップアップブロックを無効化
--disable-blink-features=AutomationControlled Seleniumの自動操作検出を回避
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager

options = Options()
options.add_argument("--headless=new") # ヘッドレスモード
options.add_argument("--disable-gpu") # GPU無効化
options.add_argument("--window-size=1920x1080") # ウィンドウサイズ固定
options.add_argument("--disable-popup-blocking") # ポップアップ無効化
options.add_argument("--disable-blink-features=AutomationControlled") # Seleniumの自動操作検出を防ぐ

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
driver.get("https://www.google.com")
print(driver.title)
driver.quit()

スクリプト実行時に引数に–debugを入れるとGUIモードで起動できるようにして、デバッグ作業をやりやすくする

 デバッグ作業をする際、GUIモードで動作を確認できると便利。なので、スクリプト実行時に–debugオプションを渡すことで、GUIモードとヘッドレスモードを簡単に切り替えられるようにしておくと開発が捗る。

import argparse
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager

def main(debug=False):
options = Options()
if not debug:
options.add_argument("--headless=new") # ヘッドレスモード(デバッグ時は無効)
options.add_argument("--disable-gpu")
options.add_argument("--window-size=1920x1080")
options.add_argument("--disable-popup-blocking")
options.add_argument("--disable-blink-features=AutomationControlled")

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
driver.get("https://www.google.com")
print(driver.title)
driver.quit()

if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--debug", action="store_true", help="デバッグモード(GUI表示)")
args = parser.parse_args()
main(debug=args.debug)

コメント