Selenium:正确的定位器但不能与元素交互(输入字段) [英] Selenium: Correct locator but cannot interact with the element (input-field)
问题描述
我尝试使用以下脚本与输入字段交互:
<代码>从硒导入网络驱动程序from selenium.webdriver.common.by import By从 selenium.webdriver.support.ui 导入 WebDriverWait从 selenium.webdriver.support 导入 expected_conditions 作为 EC从 selenium.webdriver.support.ui 导入选择从 selenium.common.exceptions 导入 NoSuchElementException从 selenium.webdriver.common.keys 导入密钥从 selenium.webdriver.common.action_chains 导入 ActionChains从时间导入睡眠用户名 = ****"密码 = ****"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')等待 = WebDriverWait(驱动程序,20)driver.get(url)driver.find_element_by_name("用户名").send_keys(用户名)driver.find_element_by_name("密码").send_keys(密码)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')#选择购买或销售操作: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']"))# 按值选择购买"select2.select_by_value('购买')buttonnew = wait.until(EC.presence_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]/输入")))newaction = ActionChains(驱动程序)newaction.move_to_element(buttonnew).send_keys(int(22)).perform()
除非涉及到最后一部分,否则脚本执行正确:
buttonnew = wait.until(EC.presence_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(驱动程序)newaction.move_to_element(buttonnew).send_keys(int(22)).perform()
这里执行停止.
我用浏览器检查了 XPATH.它是独一无二的.我通过检查"检查了 Chrome然后按 >CRTL + F<
这是一个屏幕截图,Chrome 确实找到了定位器,而且它似乎是独一无二的:
这似乎表明 XPATH 是正确的,这不是找到"的问题正确的 XPATH 而是代码执行或错误编程的问题.
我还想知道,输入字段是否包含在 Shadow DOM 或任何其他形式的隐藏结构中.
但如果是这样,为什么在前面的步骤中可以选择所有其他字段(例如从下拉列表中选择)?
为了让您检查是否正确,我将提供该面板的完整 html(因为它是在该页面内打开的窗口):
<div id="trade-dialog-container"><div id="trading-modal-root";角色=对话"class =模式淡入淡出发布交易模式根";tabindex="-1";样式=显示:块;padding-right: 17px;"><div class="modal-dialog"><div class="modal-content"><div class="authorization-request-panel";样式=显示:无;"><div class="spinner-modal-wrapper"><div class="spinner"></div>
<div class="trading-panel clearfix";样式="><div class="trading-panel-close modal-close-button";数据关闭=模态"><i class="icon-close4"></i>
<div class="col-xs-12 col-sm-6 col-sm-push-6 col-md-push-6 col-lg-push-6 trading-panel-preview-col trade-panel-col";><div class="trading-panel-preview"><div class="trading-panel-preview-wrapper"><div id="trade-main-modal-header";class=交易面板标题"><h4 class="trade-popup-title-shortdesc">AKER CARB.CAPT.AS NK1</h4><span class="trade-popup-title-sub"><span id="js-underlying-isin";数据发布者=1900">NO0010890304 (L&S Kurse)</span></span>
<div class="row trading-panel-price-container"><div class="col-xs-6 trading-panel-price-wrapper"><div class="trading-panel-price"><div class="currentBid text-center">2,392<small>EUR</small></div><span class="trading-panel-price-sub">Verkaufskurs (Bid)</span>