Seleniumでスクレイピングをしていると必ずエラーに遭遇します。よく出るエラーの原因と解決策をまとめました。



NoSuchElementException(要素が見つからない)


最もよく出るエラーです。CSSセレクタやXPathが間違っているか、要素がまだ読み込まれていないケースがほとんどです。


# エラー例
NoSuchElementException: no such element: Unable to locate element

解決策1: セレクタを確認する

DevToolsで対象要素を右クリック → Copy → Copy selector でCSSセレクタを正確にコピーします。


解決策2: 読み込み待ちを入れる


from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 要素が現れるまで最大10秒待つ
wait = WebDriverWait(driver, 10)
elem = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".target")))

解決策3: iframeの中にある


iframe = driver.find_element(By.TAG_NAME, "iframe")
driver.switch_to.frame(iframe)
# iframe内の要素を操作
driver.switch_to.default_content() # 元に戻る


ElementNotInteractableException(クリックできない)


# エラー例
ElementNotInteractableException: element not interactable

要素が非表示・無効化・他の要素に隠れているときに発生します。


# 解決策1: 要素が見えるまでスクロールしてからクリック
driver.execute_script("arguments[0].scrollIntoView(true);", elem)
time.sleep(0.5)
elem.click()

# 解決策2: JavaScriptでクリック(オーバーレイがある場合に有効)
driver.execute_script("arguments[0].click();", elem)

# 解決策3: 表示されるまで待つ
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".btn")))


TimeoutException(タイムアウト)


# エラー例
TimeoutException: Message: timeout

WebDriverWaitで指定した時間内に要素が現れなかった場合に発生します。


# 解決策1: 待ち時間を長くする
wait = WebDriverWait(driver, 30) # 10秒→30秒に延長

# 解決策2: 待つ条件を変える
# presence_of_element_located: DOMに存在する(非表示でもOK)
# visibility_of_element_located: 見えている状態になるまで待つ
wait.until(EC.visibility_of_element_located((By.ID, "result")))


StaleElementReferenceException(要素が古い)


# エラー例
StaleElementReferenceException: stale element reference

ページ遷移やDOM更新後に、取得した要素を使おうとすると発生します。


# 解決策: ページ操作後に要素を取り直す
driver.find_element(By.CSS_SELECTOR, ".btn").click()
time.sleep(1) # ページ更新を待つ

# 再取得してから使う
elem = driver.find_element(By.CSS_SELECTOR, ".result") # 取り直し
print(elem.text)


WebDriverException(Chromeが起動しない)


# よく出るエラー
WebDriverException: unknown error: Chrome failed to start

ChromeとChromeDriverのバージョンが合っていない、またはChromeのパスが見つからない場合に発生します。


# 解決策1: Selenium 4.6以上を使う(自動でバージョン管理される)
pip install --upgrade selenium

# 解決策2: Macでヘッドレスモードが動かないとき
options = Options()
options.add_argument("--headless=new") # 旧方式から変更
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")


セレクトボックスが操作できない


# 解決策: Selectクラスを使う
from selenium.webdriver.support.ui import Select

select = Select(driver.find_element(By.ID, "prefecture"))

# テキストで選択
select.select_by_visible_text("東京都")

# 値で選択
select.select_by_value("tokyo")

# インデックスで選択
select.select_by_index(1)


Ruby Selenium の場合


Ruby版Seleniumでも同様のエラーが出ます。


# Ruby: 要素が見つからないエラー対処
require "selenium-webdriver"

driver = Selenium::WebDriver.for :chrome
wait = Selenium::WebDriver::Wait.new(timeout: 10)

# 要素が現れるまで待つ
elem = wait.until { driver.find_element(:css, ".target") }

# JavaScriptでクリック
driver.execute_script("arguments[0].click();", elem)


エラーの多くは「タイミング」の問題です。time.sleep()よりもWebDriverWaitを使う習慣をつけると安定します。