そんな作業をプログラムするときによく躓くのが、「element not interactable」というエラー。 クリックしたいのに出来ない、とか、情報を送り込んでくれない、とかそういう系統です。 エレメントは見つかっているのに何でダメかなぁ、と言いたくなりますが、大抵の場合、次の2つのパティーンに分けられます。
1.複数のエレメントがあって、望みのものじゃない方を選択してしている
例えばこんな文。
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
element = wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'admin_common_positive_btn')))
element.click()
element = wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'admin_common_positive_btn')))
element.click()
element = wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'admin_common_positive_btn')))
element.click()
「admin_common_positive_btn」というクラスで見つけ出したelemenntをクリックさせたい。 なのに「element not interactable」と返ってくる。 いやいやいや、ボタンって書いてあるやん。 押せるでしょ。押させてよ。と思うわけですが…。 何度やっても無理。 もしかして、このクラスが複数ある? ということで
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
elements = driver.find_elements_by_class_name('admin_common_positive_btn')
print(len(elements))
elements = driver.find_elements_by_class_name('admin_common_positive_btn')
print(len(elements))
elements = driver.find_elements_by_class_name('admin_common_positive_btn')
print(len(elements))
としてみたら、2とか3とか、複数の数字が返ってきまして、そういうことか、と。
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
elements = driver.find_elements_by_class_name('admin_common_positive_btn')
elements[1].click()
elements = driver.find_elements_by_class_name('admin_common_positive_btn')
elements[1].click()
elements = driver.find_elements_by_class_name('admin_common_positive_btn')
elements[1].click()