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'UsersBenjaminDownloadschromedriver_win32chromedriver.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()

My Issue,或者我的问题特别与代码的最后一部分有关:

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 
~anaconda3libsite-packagesseleniumwebdrivercommonaction_chains.py in perform(self)
78         """
79         if self._driver.w3c:
---> 80             self.w3c_actions.perform()
81         else:
82             for action in self._actions:
~anaconda3libsite-packagesseleniumwebdrivercommonactionsaction_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):
~anaconda3libsite-packagesseleniumwebdriverremotewebdriver.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))
~anaconda3libsite-packagesseleniumwebdriverremoteerrorhandler.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中有两个参数,您可以在代码中使用and在你的例子中,它将是

button = driver.find_element_by_xpath("//input[@data-container='body' and @data-original-title='Wie viele Stück möchten Sie kaufen?']")

正因为这件事产生了新的倾向,所以我现在用这个更新来回答我自己的问题:

我已经改变了动作链的部分,它应该执行一个"senk_keys"输入字段:

buttonnew = wait.until(EC.visibility_of_element_located((By.XPATH, "/html/body/div[3]/div[4]/div/div/div/div/div[2]/div[3]/div/div/div[2]/div[2]/input")))
newaction = ActionChains(driver)
newaction.move_to_element(buttonnew).send_keys(int(22)).perform()

使用这些新行,程序在选择下拉菜单时突然停止。

有人知道这是怎么回事吗?

感谢

最新更新