1. ホーム
  2. python

[解決済み] Selenium Element not visible exception

2022-02-06 02:55:12

質問内容

ウェブサイト上のボタンをクリックするパーサーを書くことを任されたのですが、ボタンの1つだけをクリックするのに問題があります。 次のコードは、1つのボタンを除くすべてのボタンで動作します。

以下がそのhtmlです。 http://pastebin.com/6dLF5ru8

ソースのhtmlはこちらです。 http://pastebin.com/XhsedGLb

pythonのコードです。

 driver = webdriver.Firefox()  
 ...
 el = driver.find_element_by_id("-spel-nba")
 actions.move_to_element(el)
 actions.sleep(.1)
 actions.click()
 actions.perform()

このエラーが発生します。

ElementNotVisibleException: Message: Element is not currently visible and so may not be interacted with

Saifurのように、私はちょうど同じ要素が表示されていない例外で待機を試してみました。

wait = WebDriverWait(driver, 10)
wait.until(EC.presence_of_element_located((By.XPATH, "//input[contains(@id,'spsel')][@value='nba']"))).click()

解決方法は?

ページのソースを見ると、ほとんどすべての SELECT , DIV 要素は faked であり、JavaScriptから作成されるため、webdriverでは 見る を使用します。

しかし、回避策があります。 ActionChains を実行して開発者コンソールを開き 人工 目的の要素にCLICKする。 ラベル をトリガーに NBA データの読み込み...以下はその例です。

from selenium import webdriver
from selenium.webdriver.common import action_chains, keys
import time

driver = webdriver.Firefox()
driver.get('Your URL here...')
assert 'NBA' in driver.page_source
action = action_chains.ActionChains(driver)

# open up the developer console, mine on MAC, yours may be diff key combo
action.send_keys(keys.Keys.COMMAND+keys.Keys.ALT+'i')
action.perform()
time.sleep(3)
# this below ENTER is to rid of the above "i"
action.send_keys(keys.Keys.ENTER)
# inject the JavaScript...
action.send_keys("document.querySelectorAll('label.boxed')[1].click()"+keys.Keys.ENTER)
action.perform()

または、すべての ActionChains コマンドを実行することで、単純に execute_script のようにします。

driver.execute_script("document.querySelectorAll('label.boxed')[1].click()")

これで、少なくとも私のローカルファイルでは、とにかく...。これが役に立つといいのですが