我的問題是:
我試圖找到一個輸入欄位并在其中寫入內容。
該欄位是可見的,沒有滾動條,我還加入了一個延遲,以等待,除非它被完全呈現。
以下是代碼
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時間
用戶名 = "********"/span>
密碼 = "********"/span>
url = "https://www.wikifolio.com/dynamic/de/de/login/login?ReturnUrl=/de/de/home&_=1632037782306"/span>
driver = webdriver.Chrome(executable_path=r'UsersBenjaminDownloadschromedriver_win32chromedriver.exe')
wait = WebDriverWait(driver, 20)
driver.get(url)
driver.find_element_by_name("用戶名").send_keys(用戶名)
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-selector']"/span>))
select1 = Select(driver.find_element_by_xpath("//div[@id='trading-modal-root' and(contains(@style,'block'))]//select[@class='js-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').former()
51。
52
~anaconda3libsite-packageesseleniumwebdrivercommonaction_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-packageesseleniumwebdrivercommonactions_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-packagesseleniumwebdriver
emotewebdriver.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-packagesseleniumwebdriver
emoteerrorhandler.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。訊息:元素不可互動。[object HTMLInputElement]沒有大小和 location。
(會話資訊: chrome=93.0.4577.82)
而這是相應的HTML部分:
<div class="col-xs-6"/span>>
< input class="js-order-amount trading-amount trading-pricefield textbox pull- 左" 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>/span>
這里的問題可能是什么?到目前為止,我在這里發現的所有問題都與一個隱藏的元素有關(在螢屏的視窗中不是真的 "可見"),或者是延遲太短,以至于該元素無法呈現。 我還嘗試了20秒的延遲,但這并沒有改變什么。
編輯。 我還想,也許這個東西被包裝成了一個div,這就是為什么我現在提供了該行的整個html:
EDIT
<div class="row">
<div class="col-xs-6"/span>>
<span class="settings-label"/span>> Stück</span>。
</div>/span>
<div class="col-xs-6">
< input class="js-order-amount trading-amount trading-pricefield textbox pull- 左" 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>/span>
</div>/span>
那么,是否有一種方法可以首先處理div元素并以某種方式 "點擊 "它。
提前感謝,我很感激。 Benjamin
uj5u.com熱心網友回復:
要在xpath中擁有兩個引數,你可以在代碼中使用和。
在你的例子中,它將是
button = driver.find_element_by_xpath("//input[@data-container='body' and @data-original-title='Wie viele Stück m?chten Sie kaufen? ' ]")
uj5u.com熱心網友回復:
所以只是因為從這個事情中產生了一個新的處置方法,我現在將用這個更新來回答我自己的問題:
我已經改變了我的問題。
我已經改變了帶有動作鏈的部分,它應該對輸入欄位執行 "senk_keys":
buttonnew = wait.until(EC.visibility_of_element_located((By. XPATH, "/html/body/div[3]/div[4]/div/div/div[2]/div[3]/div/div[2]/input"/span>))
newaction = ActionChains(driver)
newaction.move_to_element(buttonnew).send_keys(int(22)).performance()
有了這個新的行,當它從下拉選單中選擇時,程式突然停止。
有人知道這里發生了什么嗎?
謝謝
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/327062.html
標籤:
下一篇:復選框中的X路徑定位器
