python - Selenium Python:ElementNotInteractableException:对象没有大小和位置
问题描述
我的问题如下:
我试图找到一个输入字段并在其中写入。
该字段是可见的,没有滚动条,我也延迟了,等待它,除非它完全呈现。
这是代码
from selenium import webdriver
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.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
import time
username = "********"
password = "********"
url = "https://www.wikifolio.com/dynamic/de/de/login/login?ReturnUrl=/de/de/home&_=1632037782306"
driver = webdriver.Chrome(executable_path=r'\Users\Benjamin\Downloads\chromedriver_win32\chromedriver.exe')
wait = WebDriverWait(driver, 20)
driver.get(url)
driver.find_element_by_name("Username").send_keys(username)
driver.find_element_by_name("Password").send_keys(password)
driver.find_element_by_css_selector("button").click()
driver.get("https://www.wikifolio.com/de/de/meine-wikifolios/trade/wf00wiking")
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".c-disclaimer .js-disclaimer__abort, .c-disclaimer .js-disclaimer__change"))).click()
wait.until(EC.visibility_of_element_located((By.XPATH, "//a[@data-description='AKER CARB.CAPT.AS NK1']"))).click()
wait.until(EC.presence_of_element_located((By.XPATH, "//div[@id='trading-modal-root' and(contains(@style,'block'))]//select[@class='js-order-type-select order-type-selector']")))
select1 = Select(driver.find_element_by_xpath("//div[@id='trading-modal-root' and(contains(@style,'block'))]//select[@class='js-order-type-select order-type-selector']"))
select1.select_by_value('quote')
#to select purchase or sale action:
select2 = Select(driver.find_element_by_xpath("//div[@id='trading-modal-root' and(contains(@style,'block'))]//select[@class='js-order-type-buysell order-buysell-selector']"))
# select by value "buy"
select2.select_by_value('buy')
sleep(3)
button = driver.find_element_by_xpath("//input[@data-container='body'][@data-original-title='Wie viele Stück möchten Sie kaufen?']")
ActionChains(driver).move_to_element(button).send_keys('33').perform()
我的问题,或者我的问题与该代码的最后一部分特别相关:
sleep(3)
button = driver.find_element_by_xpath("//input[@data-container='body'][@data-original-title='Wie viele Stück möchten Sie kaufen?']")
ActionChains(driver).move_to_element(button).send_keys('33').perform()
这是错误消息:
---------------------------------------------------------------------------
ElementNotInteractableException Traceback (most recent call last)
<ipython-input-28-34833c86f501> in <module>
48 sleep(3)
49 button = driver.find_element_by_xpath("//input[@data-container='body'][@data-original-title='Wie viele Stück möchten Sie kaufen?']")
---> 50 ActionChains(driver).move_to_element(button).send_keys('33').perform()
51
52
~\anaconda3\lib\site-packages\selenium\webdriver\common\action_chains.py in perform(self)
78 """
79 if self._driver.w3c:
---> 80 self.w3c_actions.perform()
81 else:
82 for action in self._actions:
~\anaconda3\lib\site-packages\selenium\webdriver\common\actions\action_builder.py in perform(self)
74 if encoded['actions']:
75 enc["actions"].append(encoded)
---> 76 self.driver.execute(Command.W3C_ACTIONS, enc)
77
78 def clear_actions(self):
~\anaconda3\lib\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))
~\anaconda3\lib\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: [object HTMLInputElement] has no size and location
(Session info: chrome=93.0.4577.82)
这是相应的 HTML 部分:
<div class="col-xs-6">
<input class="js-order-amount trading-amount trading-price-field textbox pull-left" type="text" maxlength="9" required="required" placeholder="Menge" value="1" data-toggle="tooltip" data-html="true" data-trigger="manual" data-container="body" data-placement="right" title="" data-original-title="Wie viele Stück möchten Sie kaufen?">
</div>
这里可能是什么问题?到目前为止,我在这里发现的所有问题都与隐藏元素(在屏幕窗口中不是字面上“可见”)或延迟太短有关,因此该元素无法呈现。我还尝试了 20 秒的延迟,这不会改变任何事情。
编辑 我还想,也许这个东西被包装成一个 div,这就是为什么我现在提供该行的整个 html:
<div class="row">
<div class="col-xs-6">
<span class="settings-label">Stück</span>
</div>
<div class="col-xs-6">
<input class="js-order-amount trading-amount trading-price-field textbox pull-left" type="text" maxlength="9" required="required" placeholder="Menge" value="1" data-toggle="tooltip" data-html="true" data-trigger="manual" data-container="body" data-placement="right" title="" data-original-title="Wie viele Stück möchten Sie kaufen?">
</div>
</div>
那么有没有办法首先解决 div 元素并以某种方式“单击”它。
在此先感谢,本杰明
解决方案
要在 xpath 中有 2 个参数,您可以and
在您的代码中使用您的情况,它将是
button = driver.find_element_by_xpath("//input[@data-container='body' and @data-original-title='Wie viele Stück möchten Sie kaufen?']")
推荐阅读
- python - 如果值存在于第一列中,则从多维列表中检索键
- c# - 使用 LINQ 进行分组、连接和计数
- excel - 如何插入缺少时间的行和单元格
- android - 无法在 NoBar.FullScreen 活动中显示材料警报对话框
- sql - Hive 查询 - 将值除以组中的值的数量
- java - JerseyWebTarget IPv6 支持?
- javascript - 在父级中单击按钮时如何将数据从子级传递给父级
- swift - 如何从另一个孩子 Firebase Swift 中获取孩子
- git - 将 SVN 项目迁移到 Git - 分支和标签完全错误
- python - 缺少 Spyder 依赖项 qtconsole