python-3.x - Python Selenium 元素不可交互
问题描述
我遇到了麻烦,send_keys()
非常感谢任何帮助。
下面是我的代码
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
browser = webdriver.Chrome('C:\\Users\johns\Downloads\chromedriver')
browser.get('https://www.youtube.com/')
searchbox=browser.find_element_by_xpath('//*[@id="search"]')
searchbox.send_keys('economics explained')
searchbutton = WebDriverWait(browser, 6).until(EC.presence_of_element_located((By.XPATH, '//*[@id="search-icon-legacy"]/yt-icon')))
browser.execute_script("arguments[0].click();", searchbutton)
每次我运行程序时,都会弹出 chrome 选项卡并打开 youtube,但searchbox.send_keys('economics explained')
无法正常工作,我会收到此错误消息。
File "C:/Users/johns/PycharmProjects/DABIGHIT/testing 2.py",
line 11, in <module> searchbox.send_keys('economics explained')
File "C:\Users\johns\PycharmProjects\DABIGHIT\venv\lib\site-packages\selenium\webdriver\remote
\webelement.py",
line 477, in send_keys self._execute(Command.SEND_KEYS_TO_ELEMENT),
File "C:\Users\johns\PycharmProjects\DABIGHIT\venv\lib\site-packages\selenium\webdriver\remote
\webelement.py",
line 633, in _execute return self._parent.execute(command, params)
File "C:\Users\johns\PycharmProjects\DABIGHIT\venv\lib\site-packages\selenium\webdriver\remote
\webdriver.py",
line 321, in execute self.error_handler.check_response(response)
File "C:\Users\johns\PycharmProjects\DABIGHIT\venv\lib\site-packages\selenium\webdriver\remote
\errorhandler.py",
line 242, in check_response raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
解决方案
找到元素时会发生 ElementNotInteractableException,但您无法与之交互。
它的原因有很多:
元素不可见/未显示元素在屏幕外元素在另一个元素后面或隐藏
您可以尝试以下解决方案:
driver = webdriver.Chrome(executable_path=" path for chromedriver.exe")
url = 'http://www.youtube.com'
driver.get(url)
driver.maximize_window()
wait = WebDriverWait(driver, 20)
print(driver.title)
element = wait.until(EC.presence_of_element_located((By.XPATH, "//form[@id='search-form']//div[@id='container']//div[@id='search-input']//input[@id='search']")))
actionChains = ActionChains(driver)
actionChains.move_to_element(element).click().perform()
actionChains.move_to_element(element).send_keys("Test",Keys.RETURN).perform()
driver.maximize_window()
注意:请在您的解决方案中添加以下导入
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
推荐阅读
- android - 多种 Gradle 产品风味
- hubot - 我想知道 botbuilder 是如何听的,它在哪里听?
- jakarta-ee - 为什么我的 Tomcat 服务器 7 不能在 Eclipse Luna 中运行?
- android - 移动 Seekbar 不流畅
- javascript - JavaScript:打印一些额外的字符
- python - 在 Django 中使用装饰器会阻止请求
- reactjs - 如何减小 React Native 项目大小
- debugging - 如何调试独立的 GAS 脚本?
- angular - 采用路由参数和输入的组件的最佳方式?
- php - SQL 已连接但无法使用 php 运行查询