You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Selenium中submit仅调试模式生效问题求助

解决方案:调试模式正常但FromDate参数不被识别的问题

针对你遇到的DevExpress ASPxDateEdit控件在Selenium正常模式下无法识别输入值的问题,以下是几个可行的解决思路:

1. 触发输入框的DOM变更事件

DevExpress的日期控件通常需要手动触发change或blur事件来确认输入值,仅用send_keys可能无法让控件内部更新状态。可以通过模拟按键实现:

from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

url = "https://my.elexys.be/MarketInformation/SpotBelpex.aspx"
driver = webdriver.Chrome()
driver.get(url)

# 等待FromDate输入框可交互
FromDate = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.NAME, "ctl00$contentPlaceHolder$fromASPxDateEdit")))
FromDate.clear()
FromDate.send_keys("01/11/2023")
# 模拟TAB键触发失去焦点,让控件确认值
FromDate.send_keys(Keys.TAB)

# 同样处理UntilDate
UntilDate = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.NAME, "ctl00$contentPlaceHolder$untilASPxDateEdit")))
UntilDate.clear()
UntilDate.send_keys("01/12/2023")
UntilDate.send_keys(Keys.TAB)

# 等待按钮可点击后提交
ShowData_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.NAME, "ctl00$contentPlaceHolder$refreshBelpexCustomButton")))
ShowData_button.submit()

2. 使用JavaScript直接设置控件值并触发事件

如果模拟按键无效,可以直接通过JS强制设置输入框的value并触发变更事件:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

url = "https://my.elexys.be/MarketInformation/SpotBelpex.aspx"
driver = webdriver.Chrome()
driver.get(url)

# 等待输入框加载完成
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.NAME, "ctl00$contentPlaceHolder$fromASPxDateEdit")))

# 用JS设置FromDate值并触发change事件
driver.execute_script("""
    const fromDate = document.querySelector('[name="ctl00$contentPlaceHolder$fromASPxDateEdit"]');
    fromDate.value = '01/11/2023';
    fromDate.dispatchEvent(new Event('change'));
""")

# 同样处理UntilDate
driver.execute_script("""
    const untilDate = document.querySelector('[name="ctl00$contentPlaceHolder$untilASPxDateEdit"]');
    untilDate.value = '01/12/2023';
    untilDate.dispatchEvent(new Event('change'));
""")

# 等待按钮可点击后提交
ShowData_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.NAME, "ctl00$contentPlaceHolder$refreshBelpexCustomButton")))
ShowData_button.submit()

3. 优化等待逻辑,确保控件完全初始化

调试模式下速度慢,控件有足够时间初始化,正常模式下可能需要等待控件的内部脚本加载完成:

from selenium.webdriver.support.ui import WebDriverWait

url = "https://my.elexys.be/MarketInformation/SpotBelpex.aspx"
driver = webdriver.Chrome()
driver.get(url)

# 等待页面JS加载完成(判断document.readyState为complete)
WebDriverWait(driver, 15).until(lambda d: d.execute_script('return document.readyState') == 'complete')

# 后续操作同方案1或2

4. 尝试替换submit为click方法

部分情况下submit可能不会触发控件的验证逻辑,尝试改用click:

# 等待按钮可点击后点击
ShowData_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.NAME, "ctl00$contentPlaceHolder$refreshBelpexCustomButton")))
ShowData_button.click()

内容的提问来源于stack exchange,提问作者Jean Marc Canon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 04:20:29