首页 > 解决方案 > Python Selenium 元素不可交互

问题描述

我遇到了麻烦,send_keys()非常感谢任何帮助。

下面是我的代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait


browser = webdriver.Chrome('C:\\Users\johns\Downloads\chromedriver')
browser.get('https://www.youtube.com/')

searchbox=browser.find_element_by_xpath('//*[@id="search"]')
searchbox.send_keys('economics explained')

searchbutton = WebDriverWait(browser, 6).until(EC.presence_of_element_located((By.XPATH, '//*[@id="search-icon-legacy"]/yt-icon')))
browser.execute_script("arguments[0].click();", searchbutton)

每次我运行程序时,都会弹出 chrome 选项卡并打开 youtube,但searchbox.send_keys('economics explained')无法正常工作,我会收到此错误消息。

File "C:/Users/johns/PycharmProjects/DABIGHIT/testing 2.py", 
line 11, in <module> searchbox.send_keys('economics explained')

File "C:\Users\johns\PycharmProjects\DABIGHIT\venv\lib\site-packages\selenium\webdriver\remote
\webelement.py", 
line 477, in send_keys self._execute(Command.SEND_KEYS_TO_ELEMENT),

File "C:\Users\johns\PycharmProjects\DABIGHIT\venv\lib\site-packages\selenium\webdriver\remote
\webelement.py",
line 633, in _execute return self._parent.execute(command, params)

File "C:\Users\johns\PycharmProjects\DABIGHIT\venv\lib\site-packages\selenium\webdriver\remote
\webdriver.py", 
line 321, in execute self.error_handler.check_response(response)

File "C:\Users\johns\PycharmProjects\DABIGHIT\venv\lib\site-packages\selenium\webdriver\remote
\errorhandler.py", 
line 242, in check_response raise exception_class(message, screen, stacktrace)

selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable

标签: python-3.xseleniumselenium-webdriver

解决方案


找到元素时会发生 ElementNotInteractableException,但您无法与之交互。

它的原因有很多:

元素不可见/未显示元素在屏幕外元素在另一个元素后面或隐藏

您可以尝试以下解决方案:

driver = webdriver.Chrome(executable_path=" path for chromedriver.exe")
url = 'http://www.youtube.com'
driver.get(url)
driver.maximize_window()
wait = WebDriverWait(driver, 20)
print(driver.title)

element = wait.until(EC.presence_of_element_located((By.XPATH, "//form[@id='search-form']//div[@id='container']//div[@id='search-input']//input[@id='search']")))

actionChains = ActionChains(driver)
actionChains.move_to_element(element).click().perform()
actionChains.move_to_element(element).send_keys("Test",Keys.RETURN).perform()

driver.maximize_window()

注意:请在您的解决方案中添加以下导入

from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains

推荐阅读