社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

selenium中使用python的ElementNotInteractiableException

Eeplo • 3 年前 • 1218 次点击  

我试图学习selenium,但我偶然发现了一个似乎无法修复的错误:ElementNotInteractiableException(代码给出了timeoutexception)。 我读过各种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社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/129223
 
1218 次点击  
文章 [ 2 ]  |  最新文章 3 年前
cruisepandey
Reply   •   1 楼
cruisepandey    3 年前

当你使用这个xpath时 //*[@id="search"] 中有5个匹配节点 HTMLDOM .

如果您打算定位如下所示的主搜索栏:

enter image description here

然后可以使用下面的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

Max Daroshchanka
Reply   •   2 楼
Max Daroshchanka    3 年前

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

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

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

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

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