python - ElementNotInteractableException:消息:元素不是元素不可交互错误使用 Selenium 和 Python 将文本发送到电子邮件字段
问题描述
我已经尝试过其他人提出相同问题的所有帖子,但没有一个适合我的情况。我需要编写一个脚本来获取以下网站的批发价格:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException
LoginURL = "https://www.coffeeparts.com.au/customer/account/login/"
driver = webdriver.Chrome("C:/chromedriver.exe")
driver.delete_all_cookies()
driver.get(LoginURL)
email = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.ID, 'email')))
email.send_keys("test")
driver.close()
对于我尝试过的任何版本的代码,我总是会遇到同样的错误。我需要对电子邮件和密码字段运行 send_keys 方法,然后单击登录按钮。之后,我将获取登录会话信息以运行网络爬虫脚本以获取商品的批发价格。
---------------------------------------------------------------------------
ElementNotInteractableException Traceback (most recent call last)
<ipython-input-14-ee71e5f9bc26> in <module>()
13
14 email = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.ID, 'email')))
---> 15 email.send_keys("test")
16
17 driver.close()
c:\python27\lib\site-packages\selenium\webdriver\remote\webelement.pyc 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
c:\python27\lib\site-packages\selenium\webdriver\remote\webelement.pyc 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):
c:\python27\lib\site-packages\selenium\webdriver\remote\webdriver.pyc 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))
c:\python27\lib\site-packages\selenium\webdriver\remote\errorhandler.pyc 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
请帮忙。非常感谢。
解决方案
你很亲密。但是您使用的定位器正在识别 的电子邮件地址字段wholesale-login-form
,而不是您需要识别的电子邮件地址字段login-form
解决方案
要将字符序列发送到电子邮件地址字段,您必须诱导WebDriverWait并且element_to_be_clickable()
您可以使用以下任一定位器策略:
使用
CSS_SELECTOR
driver.get("https://www.coffeeparts.com.au/customer/account/login/") WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "form#login-form ul.form-list input#email"))).send_keys("vietnguyenswin")
使用
XPATH
:driver.get("https://www.coffeeparts.com.au/customer/account/login/") WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//h2[text()='Registered Customers']//following::ul[1]//input[@id='email']"))).send_keys("vietnguyenswin")
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
浏览器快照:
参考
您可以在以下位置找到一些相关的讨论:
推荐阅读
- mysql - 使用 MySql 5.5.62 创建带有 ORDER BY 的序列列
- rust - Rust中取模求幂密码函数的优化实现
- php - 浏览器在运行此 php 代码时显示一些语法错误
- javascript - 阅读 Next.js 错误
- wordpress - 从 URL 结构中删除帖子名称
- for-loop - pyspark 将 dic 与大数据帧匹配,并使用 for-loop 计算每一行
- apache - 基本身份验证无法使用本地代理反向
- javascript - 如何在 Wordpress 中为自定义 CMS 创建钩子?
- python - SQLAlchemy:如果父级未知,则添加子级
- node.js - 如果一段时间后没有数据,Nodejs会结束一个可读流