使用 python 的硒中的 ElementNotInteractableException

ElementNotInteractableException in selenium using python

我正在尝试学习 selenium,但我偶然发现了一个我似乎无法修复的错误:ElementNotInteractableException(代码给出了超时异常)。 我已经阅读了各种 Whosebug 帖子并尝试了答案,但其中 none 有效。 我只是想在 Youtube 的搜索栏中输入几个词。 无论如何,这是代码。

import undetected_chromedriver.v2 as uc
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.wait import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC

from selenium.webdriver.common.keys import Keys

options = uc.ChromeOptions()
options.binary_location = "C:\Program Files\BraveSoftware\Brave-Browser\Application\brave.exe"
options.add_argument("--user-data-dir=c:\temp\testprofile2")
driver = uc.Chrome(options=options)
driver.get("https://www.youtube.com/")


def enter_search_term(driver):
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="search"]'))).send_keys("test")
    time.sleep(5)
    driver.quit()

enter_search_term(driver)

问题的原因可能是,您尝试发送键的元素不是应该接收输入文本的真实元素。

1 确保 '//*[@id="search"]' 找到了一个元素。 (如果有多个,您的脚本将与第一个找到的可能被隐藏的交互)。

2 确保搜索字段未隐藏,宽度和高度均为正值。

如果您有一些 selenium 录音播放工具,例如 selenium IDE,您可以尝试在启用录音的情况下手动执行所有步骤,这样您就会看到接收搜索文本的真实元素输出脚本。

也试着看看这篇文章https://www.geeksforgeeks.org/automate-youtube-with-python/

当您使用此 xpath //*[@id="search"] 时,HTMLDOM 中有 5 个匹配节点。

如果您的目的是找到如下所示的主搜索栏:

那么你可以使用下面的 XPath

//input[@id='search']

因此您的有效代码将是:

options = uc.ChromeOptions()
options.binary_location = "C:\Program Files\BraveSoftware\Brave-Browser\Application\brave.exe"
options.add_argument("--user-data-dir=c:\temp\testprofile2")
driver = uc.Chrome(options=options)
driver.maximize_window()


driver.get("https://www.youtube.com/")


def enter_search_term(driver):
    WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//input[@id='search']"))).send_keys("test")
    time.sleep(5)
    driver.quit()
enter_search_term(driver)

我已经测试过了,它工作正常。请注意,我也在最大化浏览器。并使用 visibility_of_element_located