问题描述
我尝试在网站上使用send_keys,这给我一个错误,指出元素不可交互.
I try to use send_keys on a website, which gives me an error of element not interatable.
这是我的下面的代码:
import selenium
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.select import Select
from selenium.webdriver.common.action_chains import ActionChains
import time
chrome_optionsme = Options()
chrome_optionsme.add_argument("--incognito")
chrome_optionsme.add_argument("--window-size=1920x1080")
driver = webdriver.Chrome(options=chrome_optionsme,
executable_path="/Users/chueckingmok/Desktop/html/chromedriver")
url='https://thelubricantoracle.castrol.com/industrial/en-DE'
driver.get(url)
time.sleep(5)
welcome_sec_one=WebDriverWait(driver,10).until(
EC.presence_of_element_located((By.XPATH,'//*[@id="ctl00_termsPopup_lbConfirm"]'))
)
welcome_sec_one.click()
time.sleep(5)
driver.find_element_by_xpath("//input[@class='search'[@id='txtSearch']").send_keys("Example")
![上传错误图片] [1]
![Uploaded the error image][1]
Here is the code
ElementNotInteractableException Traceback (most recent call last)
<ipython-input-2-1415cecd56f9> in <module>
----> 1 driver.find_element_by_xpath("//input[@class='search'][@id='txtSearch']").send_keys("Example")
/Applications/anaconda3/lib/python3.7/site-packages/selenium/webdriver/remote/webelement.py in send_keys(self, *value)
477 self._execute(Command.SEND_KEYS_TO_ELEMENT,
478 {'text': "".join(keys_to_typing(value)),
--> 479 'value': keys_to_typing(value)})
480
481 # RenderedWebElement Items
/Applications/anaconda3/lib/python3.7/site-packages/selenium/webdriver/remote/webelement.py in _execute(self, command, params)
631 params = {}
632 params['id'] = self._id
--> 633 return self._parent.execute(command, params)
634
635 def find_element(self, by=By.ID, value=None):
/Applications/anaconda3/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py in execute(self, driver_command, params)
319 response = self.command_executor.execute(driver_command, params)
320 if response:
--> 321 self.error_handler.check_response(response)
322 response['value'] = self._unwrap_value(
323 response.get('value', None))
/Applications/anaconda3/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py in check_response(self, response)
240 alert_text = value['alert'].get('text')
241 raise exception_class(message, screen, stacktrace, alert_text)
--> 242 raise exception_class(message, screen, stacktrace)
243
244 def _value_or_default(self, obj, key, default):
ElementNotInteractableException: Message: element not interactable
(Session info: chrome=83.0.4103.116)
我认为问题是我最终无法找到该元素.因此,这就是元素不可交互的原因.顺便说一句,网站链接: https://thelubricantoracle.castrol.com/industrial/zh-CN #我想使用搜索按钮.
I think the problem is that I cannot locate the element eventually.So, that's why the element not interactable.btw, the website link: https://thelubricantoracle.castrol.com/industrial/en-DE#I want to use the search button.
任何人都可以帮忙吗?
推荐答案
此错误消息...
ElementNotInteractableException: Message: element not interactable
...表示 WebElement 在该时间点是不可交互的(不处于可交互状态).
...implies that the WebElement with whom you are trying to interact isn't interactable (isn't in interactable state) at that point of time.
此错误的两(2)个主要原因是:
The two(2) main reasons for this error are:
- 您正在尝试与错误/错误的元素进行交互.
- 或者您甚至在元素变为可点击/可交互之前就调用
click()
太早了.
- Either you are trying to interact with a wrong/mistaken element.
- Or you are invoking
click()
too early even before the element turns clickable / interactable.
要在搜索字段中发送字符序列,您必须诱导,您可以使用以下:
To send a character sequence with in the search field you you have to induce WebDriverWait for the element_to_be_clickable()
and you can use the following Locator Strategies:
代码块:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
driver.get("https://thelubricantoracle.castrol.com/industrial/en-DE")
WebDriverWait(driver, 20).until(lambda driver: driver.execute_script('return document.readyState') == 'complete')
time.sleep(3)
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='button primary' and contains(@id, 'termsPopup_lbConfirm')]"))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@id='search-init']"))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='search']"))).send_keys("Example")
浏览器快照:
您可以在以下位置找到几个相关的详细讨论:
You can find a couple of relevant detailed discussions in:
这篇关于ElementNotInteractableException:消息:元素不可交互错误,使用Selenium Python在搜索字段中发送文本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!