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

Python Selenium取整计算异常、send_keys输入丢点及全选删除问题

Python Selenium 脚本三类问题修复方案

1. 数值计算精度异常修复

Python默认用二进制存储浮点数,本身存在固有精度损耗。原代码用round做四舍五入后再手动判断减0.1的逻辑,既没有严格实现「向下取整到1位小数」的需求,还极易触发浮点尾差,出现类似500.000000006的异常值。
直接用decimal模块做精确十进制计算,指定向下舍入规则即可彻底规避精度问题,代码如下:

from decimal import Decimal, ROUND_FLOOR
import math

# 方案1(推荐,无精度误差):精确实现向下取整保留1位小数
amount_value = float(
    Decimal(str(equity / price)).quantize(Decimal('0.1'), rounding=ROUND_FLOOR)
)

# 方案2(轻量,绝大多数业务场景可用):整数放大取整规避浮点误差
# amount_value = math.floor(equity / price * 10) / 10

amount_leverage = amount_value * 5
print(amount_leverage)

上述逻辑不需要额外加判断修正舍入结果,从计算规则层面直接保证结果符合要求。

2. 输入时小数点丢失修复

小数点丢失的核心原因是直接向send_keys传入了浮点数类型的数值,部分网页输入框会绑定自定义键盘输入监听事件,非字符串类型的数值传入时,键值解析逻辑会跳过小数点这类非数字字符。
修复方法:传入输入内容前先转成字符串类型,同时输入前先点击输入框确保焦点落在输入区域,避免按键发送到其他页面元素。

3. 输入框清空逻辑优化

不需要连续发送多次退格,直接调用Selenium的组合键API实现全选删除即可,代码如下:

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

# 先等待输入框可交互再操作,避免元素未加载完成就发送按键
wait = WebDriverWait(driver, 10)
amount = wait.until(EC.element_to_be_clickable(amount_locator))

# 聚焦输入框
amount.click()
# Ctrl+A全选现有内容(Mac系统适配可替换为Keys.COMMAND + 'a',绝大多数网页场景下Ctrl+A通用)
amount.send_keys(Keys.CONTROL, 'a')
# 按退格删除选中内容
amount.send_keys(Keys.BACK_SPACE)

如果页面输入框有复杂的输入校验、键盘事件拦截,发组合键清空不稳定,可以直接用JS强制清空输入框值,兼容性更强:

# JS直接重置输入框value,不受页面自定义事件影响
driver.execute_script("arguments[0].value = '';", amount)

修复后完整代码参考

from decimal import Decimal, ROUND_FLOOR
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 等待输入框可交互
wait = WebDriverWait(driver, 10)
amount = wait.until(EC.element_to_be_clickable(amount_locator))

# 精确计算目标值
amount_value = float(
    Decimal(str(equity / price)).quantize(Decimal('0.1'), rounding=ROUND_FLOOR)
)
amount_leverage = amount_value * 5
print(amount_leverage)

# 清空输入框
amount.click()
amount.send_keys(Keys.CONTROL, 'a')
amount.send_keys(Keys.BACK_SPACE)

# 传入字符串格式的结果,避免小数点丢失
amount.send_keys(str(amount_leverage))

内容的提问来源于stack exchange,提问作者Francesco Battisti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:30:10