Py学习  »  Python

selenium中使用python的ElementNotInteractiableException

Eeplo • 3 年前 • 1225 次点击  

我试图学习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
 
1225 次点击  
文章 [ 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/ .