Selenium pythonエラー:要素をスクロールして表示できませんでした



Selenium Python Error



解決:

このエラーメッセージ...

selenium.common.exceptions.ElementNotInteractableException:メッセージ:要素スクロールして表示できませんでした

...それは WebDriver インスタンス、つまり 運転者 ビューポート内の要素をスクロールして呼び出すことができませんでしたクリック()。




まず第一に、あなたのユースケースは呼び出すことです理想的には使用する代わりに、要素をクリック()あなたが使用する必要があるpresence_of_element_located() ExpectedConditions なので element_to_be_clickable() 次のように:

WebDriverWait(driver、1000000).until(EC.element_to_be_clickable((By.XPATH、 '/ html / body / div [5] / div [3] / div / button / span')))。click()

あなたはでいくつかの詳細な議論を見つけることができます:



  • メッセージ:Seleniumのドロップダウンメニュー内のオプションをクリックしようとしたときに、要素をスクロールして表示できませんでした
  • org.openqa.selenium.ElementNotInteractableException:ボタンをクリックしようとしたときに、要素をスクロールして表示できませんでした

別の方法として、エラーメッセージに従って、内の要素をスクロールします。 ビューポート 呼び出す前にclick()Element.scrollIntoView()メソッドを使用することもできます。

詳細な説明は次の場所にあります。-異なるスクロールオプションの違いは何ですか?


この時点で、次の方法について言及する価値があります。



  • selenium.webdriver.common.action_chainsのmove_to_element()
  • selenium.webdriver.support.expected_conditionsのelement_to_be_clickable()

自動的に スクロール 内の要素 ビューポート

詳細な説明は次の場所にあります。-JavaScriptメソッドexecute_script()を使用せずにPythonでSeleniumWebdriverを使用してWebページをスクロールする方法


このユースケース

テキストが次のようなボタン 継続する 内にあります トップレベルのコンテンツ しかし、 モーダルダイアログボックス

DevToolsスナップショット:

ModalDialogBox

目的の要素が モーダルダイアログボックス 、そのため、検索して呼び出す誘導する必要のある要素をクリック() WebDriverWait のためにelement_to_be_clickable()を使用すると、次のロケーター戦略を使用できます。

  • 使用するXPATH:

    WebDriverWait(driver、20).until(EC.element_to_be_clickable((By.XPATH、 '// div [starts-with(@ aria-definedby、' ui-id- ')] // span [@ and text()= '続行'] ')))。click()
  • ノート :次のインポートを追加する必要があります:

    selenium.webdriver.support.uiからimportWebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC

DevToolsスナップショット:

XPath


次のxpathを使用して、それをクリックします。

element = WebDriverWait(driver、30).until(EC.element_to_be_clickable((By.XPATH、 '// div [@] / button [@] / span [contains(。、' Continue ')]')))要素。クリック()

上記のクリックが機能しない場合は、以下を試してください。

element = WebDriverWait(driver、30).until(EC.element_to_be_clickable((By.XPATH、 '// div [@] / button [@] / span [contains(。、' Continue ')]')))要素。 location_once_scrolled_into_view element.click()

または、javascriptsexecutorを使用してクリックすることもできます。

element = WebDriverWait(driver、30).until(EC.element_to_be_clickable((By.XPATH、 '// div [@] / button [@] / span [contains(。、' Continue ')]')))ドライバー。 execute_script( 'arguments [0] .click();'、element)

編集済み

続行ボタンをクリックしている以下のコードを試してください。続行ボタンとキャンセルボタンの両方があります。続行をクリックすると、別の続行ボタンをクリックします。スケジュールアプリから更新したコード。

#Scheduleアポイントメントele1 = WebDriverWait(driver、40).until(expected_conditions.element_to_be_clickable((By.XPATH、 '(// button [@] / span [contains(。、' Schedule ')])[1]')) )driver.execute_script( 'arguments [0] .click();'、ele1)#続行ボタンをクリックWebDriverWait(driver、40).until(expected_conditions.element_to_be_clickable((By.XPATH、 '// button [@] / span [contains(。、 'Continue')] ')))。click()#2番目の続行ボタンをクリックしますWebDriverWait(driver、40).until(expected_conditions.element_to_be_clickable((By.XPATH、' // button [@] / span [contains(。、 'Continue')] ')))。click()

編集済み残りのコード。

from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions from selenium.webdriver.common.action_chains import ActionChains from selenium import webdriver fromselenium.webdriver.support.select。 import Select import time driver = webdriver.Chrome()driver.get( 'https://tn.ibtfingerprint.com/')driver.maximize_window()WebDriverWait(driver、40).until(expected_conditions.element_to_be_clickable((By.XPATH 、 '// button [@ name =' IN_PublicMenuSelection '] / span [contains(。、' Schedule a New Appointment ')]')))。click()time.sleep(5)select = Select(driver.find_element_by_id( 'varAgency'))select.select_by_value( 'OTHR')WebDriverWait(driver、40).until(expected_conditions.element_to_be_clickable((By.XPATH、 '// button [@ id =' collectAgency '] / span [contains(。、 'Go')] ')))。click()element = WebDriverWait(driver、40).until(expected_conditions.element_to_be_clickable((By.ID、' varAppType ')))select = Select(element)select.select_by_va lue( '60')WebDriverWait(driver、40).until(expected_conditions.element_to_be_clickable((By.XPATH、 '// button [@ id =' collectAppType '] [contains(。、' Go ')]'))) .click()time.sleep(10)driver.find_element_by_id( 'varORI')。send_keys( 'tnvc00047')WebDriverWait(driver、40).until(expected_conditions.element_to_be_clickable((By.XPATH、 '// button [@id = 'collectORI'] [contains(。、 'Go')] ')))。click()WebDriverWait(driver、40).until(expected_conditions.element_to_be_clickable((By.XPATH、' // button [@] / span [contains(。、 'yes')] ')))。click()elements = WebDriverWait(driver、40).until(expected_conditions.presence_of_all_elements_located((By.XPATH、'(// i [@])[last( )] ')))if(len(elements)> 0):element = driver.find_element_by_xpath('(// div [@] // i [@])[last()] ')element.location_once_scrolled_into_view ActionChains(driver ).move_to_element(element).click()。perform()elements [0] .click()driver.find_element_by_css_selector( 'div.fieldentity div')。click()driver.execute_script( 'arguments [0] .click() ; '、element)element1 = WebDriverWait(driver、40) .until(expected_conditions.element_to_be_clickable((By.XPATH、 '// button [@] / span [contains(。、' Go ')]')))driver.execute_script( 'arguments [0] .click();' 、element1)time.sleep(10)driver.find_element_by_name( 'IN_varLocZipCode')。send_keys( '37204')WebDriverWait(driver、40).until(expected_conditions.presence_of_element_located((By.XPATH、 '// button [@] / span [contains(。、 'Go')] ')))。click()ele1 = WebDriverWait(driver、40).until(expected_conditions.element_to_be_clickable((By.XPATH、'(// button [@] / span [ contains(。、 'Schedule')])[1] ')))driver.execute_script(' arguments [0] .click(); '、ele1)time.sleep(10)WebDriverWait(driver、40).until( expected_conditions.element_to_be_clickable((By.XPATH、 '// button [@] / span [contains(。、' Continue ')]')))。click()WebDriverWait(driver、40).until(expected_conditions.element_to_be_clickable(( By.XPATH、 '// button [@] / span [contains(。、' Continue ')]')))。click()

このコードは、ChromeブラウザとWindows 10OSで正常に機能しています。数回テストしました。


from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions from selenium import webdriver from selenium.webdriver.support.select import Select driver = webdriver.Chrome()driver .get( 'https://tn.ibtfingerprint.com/')driver.maximize_window()WebDriverWait(driver、40).until(expected_conditions.element_to_be_clickable((By.XPATH、 '// button [@ name =' IN_PublicMenuSelection ' ] / span [contains(。、 'Schedule a New Appointment')] ')))。click()element = WebDriverWait(driver、40).until(expected_conditions.element_to_be_clickable((By.ID、' varAgency '))) select = Select(element)select.select_by_value( 'OTHR')WebDriverWait(driver、40).until(expected_conditions.element_to_be_clickable((By.XPATH、 '// button [@ id =' collectAgency '] / span [contains(。 、 'Go')] ')))。click()element = WebDriverWait(driver、40).until(expected_conditions.element_to_be_clickable((By.ID、' varAppType ')))select = Select(element)select.select_by_value( '60')WebDriv erWait(driver、40).until(expected_conditions.element_to_be_clickable((By.XPATH、 '// button [@ id =' collectAppType '] [contains(。、' Go ')]')))。click()WebDriverWait( driver、40).until(expected_conditions.element_to_be_clickable((By.ID、 'varORI')))。send_keys( 'tnvc00047')WebDriverWait(driver、40).until(expected_conditions.element_to_be_clickable((By.XPATH、 '// button [@ id = 'collectORI'] [contains(。、 'Go')] ')))。click()WebDriverWait(driver、40).until(expected_conditions.element_to_be_clickable((By.XPATH、' // button [ @] / span [contains(。、 'yes')] ')))。click()elements = WebDriverWait(driver、40).until(expected_conditions.presence_of_all_elements_located((By.XPATH、'(// form [@id = 'cjisAcknowledgementForm'] // div [@] // i [@])[last()] ')))if(len(elements)> 0):element = driver.find_element_by_xpath('(// form [@ id = 'cjisAcknowledgementForm'] // div [@] // i [@])[last()] ')driver.execute_script(' arguments [0] .click(); '、element)element1 = WebDriverWait(driver、 40).until(expected_conditions.element_to_be_clickable((By.XPATH、 '// button [@] / span [conta ins(。、 'Go')] ')))driver.execute_script(' arguments [0] .click(); '、element1)WebDriverWait(driver、40).until(expected_conditions.element_to_be_clickable((By.NAME、' IN_varLocZipCode ')))。send_keys(' 37204 ')WebDriverWait(driver、40).until(expected_conditions.presence_of_element_located((By.XPATH、' // button [@] / span [contains(。、 'Go')] ' )))。click()ele1 = WebDriverWait(driver、40).until(expected_conditions.element_to_be_clickable((By.XPATH、 '(// button [@] / span [contains(。、' Schedule ')])[1 ] ')))driver.execute_script(' arcuments [0] .click(); '、ele1)WebDriverWait(driver、40).until(expected_conditions.element_to_be_clickable((By.XPATH、' // button [@] / span [contains(。、 'Continue')] ')))。click()WebDriverWait(driver、40).until(expected_conditions.element_to_be_clickable((By.XPATH、' // button [@] / span [contains(。、 '続行')] ')))。click()