ElementNotInteractableException:尝试使用 Selenium 和 Python 在 www.finanzen.net 上搜索股票时出现元素不可交互错误

ElementNotInteractableException: element not interactable error while trying to search for stock on www.finanzen.net using Selenium and Python

我正在尝试使用 selenium 在 www.finanzen.net 上搜索股票,但总是得到

ElementNotInteractableException:元素不可交互

from selenium import webdriver

import time

chrome_options = webdriver.ChromeOptions()
prefs = {"profile.default_content_setting_values.notifications" : 2}
chrome_options.add_experimental_option("prefs", prefs)
chrome_options.add_argument("start-maximized")
driver = webdriver.Chrome(options=chrome_options, executable_path=r'F:\chromedriver.exe')

driver.get('https://www.finanzen.net/')
time.sleep(5)
cookie_banner_button = driver.find_element_by_xpath("//button[@onclick='cookieBannerOverlayClick();']")
cookie_banner_button.click()

search_field = driver.find_element_by_xpath("//input[@class='search-input']")


#search_field.click()
search_field.send_keys('bmw')
search_field.submit()
time.sleep(5)
driver.quit()

HTML:

您使用的 xpath 指向两个元素,并且它指向的第一个元素不可交互,因此出现异常。
已为元素找到正确的xpath,请参考以下代码:

from selenium import webdriver

import time

chrome_options = webdriver.ChromeOptions()
prefs = {"profile.default_content_setting_values.notifications" : 2}
chrome_options.add_experimental_option("prefs", prefs)
chrome_options.add_argument("start-maximized")
driver = webdriver.Chrome(options=chrome_options, 
executable_path=r'F:\chromedriver.exe')

driver.get('https://www.finanzen.net/')
time.sleep(5)
cookie_banner_button = driver.find_element_by_xpath("//button[@onclick='cookieBannerOverlayClick();']")
cookie_banner_button.click()

search_field = driver.find_element_by_xpath("//div[@class='shadow']//input[@class='search-input']")
search_field.send_keys('bmw')
search_field.submit()
time.sleep(5)
driver.quit()

要在 www.finanzen.net 上搜索股票,您需要为 element_to_be_clickable() 引入 WebDriverWait,您可以使用以下任一方法 :

  • 使用CSS_SELECTOR:

    driver.get('https://www.finanzen.net/')
    submit_button = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "form[name='mmssearch'] div.search-group>input.search-input[name='_search']")))
    submit_button.send_keys('bmw')
    submit_button.submit()
    
  • 使用XPATH:

    driver.get('https://www.finanzen.net/')
    submit_button = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//form[@name='mmssearch']//div[@class='search-group']/input[@class='search-input' and @name='_search']")))
    submit_button.send_keys('bmw')
    submit_button.submit()
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • 浏览器快照: