使用 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
我正在尝试学习 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