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を通す必要があるので面倒くさい。
サーバーログに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)
コメント