上記で強調表示されたボタンをクリックするためにセレンを使用しようとしています。私は要素を見つけるのに問題はありません:
download_button_path = "//button[@class='btn-primary']"
download_button = driver.find_element_by_xpath(download_button_path)
しかし、私が試して実行すると
download_button.click()
エラーメッセージが表示されます。
ElementNotVisibleException: Message: element not interactable
(Session info: chrome=70.0.3538.67)
(Driver info: chromedriver=2.42.591059 (a3d9684d10d61aa0c45f6723b327283be1ebaad8),platform=Mac OS X 10.11.6 x86_64)
手動でクリックしたときに表示されていても、Seleniumからはボタンが見えないようです。
また、ボタンの上にマウスを置いてクリックし、Enter/Returnキーをボタンに送信しようとしましたが、何も機能しません。
どんな洞察もいただければ幸いです。
HTMLで、btn-primaryがbootstrapモーダルポップアップに存在することを確認します。したがって、モーダルポップの背後に別のbtn-primaryがある可能性があります。XPathは、対話できないモーダル。
btn-primaryクラスは、すべての主ボタンで使用されるbootstrapのジェネリッククラスです。ロケーターの親としてモーダル要素を参照する一意のロケーターで試してください
download_button_path = "//[@class='lmn-edititem-modal']/../[@class=''btn-primary']"
wait = WebDriverWait(driver, 10)
download_button = wait.until(EC.visibility_of_element_located((By.XPATH, download_button_path)))
download_button .click()
CSSセレクターでこれを試すこともできます
driver.find_elements_by_css_selector(".lmn-edititem-modal .btn-primary")
私にとっては、親の助けを借りて相対Xpathを拡張することが役に立ちました。
button = driver.find_element_by_xpath("//button[@data-value='0']")
button.click()
#this did not work
button = driver.find_element_by_xpath("//section[2]/button[@data-value='0']")
button.click()
#this worked well