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

Python Selenium自动化结账时城市字段无法输入的问题求助

问题分析与解决方案

核心问题

  1. 定位错误:你用//label[@id="TextField6-label"]定位的是标签元素,而非实际接收输入的<input>框,输入操作必须作用于输入框元素。
  2. 地址自动填充干扰:将城市、州等信息合并填入billing-address1字段,可能触发浏览器或页面的自动填充机制,导致城市输入框被锁定或不可编辑。

修正步骤

1. 正确定位城市输入框

右键点击结账页面的城市输入框→选择“检查”,可看到对应的<input>元素,其id通常与label的id对应(比如label是TextField6-label,输入框就是TextField6)。正确的XPATH定位应为:

//input[@id="TextField6"]

2. 拆分地址输入,避免自动填充

不要将城市、州等信息合并到地址栏,分字段填写能减少自动填充的干扰:

# 仅填写街道地址
wait.until(EC.visibility_of_element_located((By.XPATH, "//*[@id='billing-address1']"))).send_keys(address)
# 处理城市输入框
city_input = wait.until(EC.visibility_of_element_located((By.XPATH, "//input[@id='TextField6']")))
city_input.click()  # 先激活输入框
city_input.clear()  # 清空可能的自动填充内容
city_input.send_keys(city)

3. 优化等待逻辑

输入框更适合用visibility_of_element_located作为等待条件(确保元素可见且可交互),尽量用显式等待替代time.sleep,提升稳定性。

修正后的完整代码片段

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

# 初始化浏览器
driver = webdriver.Chrome()
driver.get("https://bellevo.store/products/luna")

# 点击"立即购买"
wait = WebDriverWait(driver, 10)
buy_now_button = wait.until(EC.element_to_be_clickable((By.XPATH, "//*[@id='product-form-template--22164028883241__main']/div/div/dynamic-checkout")))
buy_now_button.click()

# 填写联系与配送信息
wait.until(EC.visibility_of_element_located((By.XPATH, "//*[@id='email']"))).send_keys(phone_number)
wait.until(EC.visibility_of_element_located((By.XPATH, "//*[@id='TextField0']"))).send_keys(first_name)
wait.until(EC.visibility_of_element_located((By.XPATH, "//*[@id='TextField1']"))).send_keys(last_name)

# 填写街道地址
wait.until(EC.visibility_of_element_located((By.XPATH, "//*[@id='billing-address1']"))).send_keys(address)

# 填写城市
city_input = wait.until(EC.visibility_of_element_located((By.XPATH, "//input[@id='TextField6']")))
city_input.click()
city_input.clear()
city_input.send_keys(city)

# 可继续添加州、邮编等字段的填写逻辑
# wait.until(EC.visibility_of_element_located((By.XPATH, "//*[@id='TextField7']"))).send_keys(state)
# wait.until(EC.visibility_of_element_located((By.XPATH, "//*[@id='TextField8']"))).send_keys(zip_code)

额外排查点

  • 若仍无法输入,可尝试用JS强制写入内容:
city_input = wait.until(EC.visibility_of_element_located((By.XPATH, "//input[@id='TextField6']")))
driver.execute_script("arguments[0].value = arguments[1];", city_input, city)
  • 检查城市输入框是否在iframe内,若是需先切换iframe:
iframe = wait.until(EC.frame_to_be_available_and_switch_to_it((By.TAG_NAME, "iframe")))
# 再定位输入框

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 04:16:15