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

如何使用Selenium和Python覆盖输入框的默认值

Selenium 输入框clear()后仍保留默认值解决方案

问题根因

该站点的邮编输入框默认值由JS异步渲染填充,原生clear()方法执行时要么元素未完全加载,要么执行后JS逻辑又重新回填了默认值,同时你使用的旧版元素定位语法在Selenium 4+版本中已废弃,也可能导致操作不生效。

具体修改方案

  • 引入显式等待,确保元素完全可交互后再执行操作,避免页面未加载完成就触发逻辑
  • 替换原生clear()方法,用全选+删除的组合操作清空输入框内容,兼容JS控制的输入框场景
  • 替换已废弃的find_element_by_name语法,使用Selenium 4+标准的元素定位写法
  • 可增加输入校验逻辑,确认输入内容符合预期后再触发回车提交

修改后的完整代码

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager

radius = int(input("Enter the radius: "))
zipcode = int(input("Enter your zipcode: "))

url = 'https://www.edmunds.com/cars-for-sale-by-owner/'

options = Options()
options.headless = False
options.add_experimental_option("detach", True)

browser = webdriver.Chrome(ChromeDriverManager().install(), options=options)
browser.maximize_window()
browser.set_page_load_timeout(15)
browser.get(url)

# 显式等待最多10秒,直到邮编输入框可交互
wait = WebDriverWait(browser, 10)
zipcode_form = wait.until(EC.element_to_be_clickable((By.NAME, 'zip')))

# 全选后删除原有内容,替代原生clear()
zipcode_form.send_keys(Keys.CONTROL, 'a')
zipcode_form.send_keys(Keys.DELETE)

# 输入自定义邮编
zipcode_form.send_keys(str(zipcode))

# 可选:校验输入内容是否正确,避免输入失效
input_value = zipcode_form.get_attribute('value')
if input_value != str(zipcode):
    # 校验失败重新输入一次
    zipcode_form.send_keys(Keys.CONTROL, 'a')
    zipcode_form.send_keys(Keys.DELETE)
    zipcode_form.send_keys(str(zipcode))

zipcode_form.send_keys(Keys.RETURN)

# 后续提取信息的代码
...

备注:如果是Mac系统运行代码,把Keys.CONTROL替换为Keys.COMMAND即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 13:24:05