【问题标题】:ElementNotInteractableException in selenium using python使用python的硒中的ElementNotInteractableException
【发布时间】:2022-01-16 06:01:51
【问题描述】:

我正在尝试学习 selenium,但我偶然发现了一个我似乎无法修复的错误:ElementNotInteractableException(代码给出了超时异常)。 我已经阅读了各种 stackoverflow 帖子并尝试了答案,但没有一个有效。 我只是想在 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)

【问题讨论】:

标签: python selenium web-scraping webdriver


【解决方案1】:

当您使用此 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

【讨论】:

    【解决方案2】:

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

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

    2 确保搜索字段没有隐藏,具有正的宽度和高度。

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

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

    【讨论】:

    • 我认为你的第一个可能的原因是正确的,我查阅了这篇文章并使用 By.NAME 而不是使用 xpath,这对我有用。
    猜你喜欢
    • 1970-01-01
    • 2018-02-07
    • 2021-04-27
    • 1970-01-01
    • 2021-01-08
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多