Selenium/Python中输入框无法清空问题求助
解决输入框预填文本无法清空的问题
你当前用键盘快捷键全选删除的方式失效,大概率是元素交互逻辑的问题,试试下面几种更可靠的解决方案:
方法1:使用Selenium内置的clear()方法
这是官方针对表单输入元素设计的清空方式,最直接稳定:
from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager 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(service=Service(ChromeDriverManager().install())) driver.implicitly_wait(0.5) driver.maximize_window() driver.get("https://www.futbin.com/fut-card-creator/22") # 处理评分输入框 rating = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, "rating_change"))) rating.click() rating.clear() # 直接调用clear()清空 rating.send_keys("90") # 处理位置输入框 position = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, "position_change"))) position.click() position.clear() position.send_keys("ST")
方法2:兼容多系统的全选删除
如果clear()无效(比如元素是非标准输入框),试试适配Windows和Mac的全选快捷键:
import sys from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.keys import Keys from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) driver.implicitly_wait(0.5) driver.maximize_window() driver.get("https://www.futbin.com/fut-card-creator/22") # 处理评分输入框 rating = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, "rating_change"))) rating.click() # 根据系统选择对应全选快捷键 if sys.platform == 'darwin': rating.send_keys(Keys.COMMAND + "a") else: rating.send_keys(Keys.CONTROL + "a") rating.send_keys(Keys.DELETE) # 用DELETE比BACK_SPACE更稳定 rating.send_keys("90") # 处理位置输入框 position = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, "position_change"))) position.click() if sys.platform == 'darwin': position.send_keys(Keys.COMMAND + "a") else: position.send_keys(Keys.CONTROL + "a") position.send_keys(Keys.DELETE) position.send_keys("ST")
方法3:JavaScript强制清空
如果前两种都不生效,直接通过JS修改元素内容(适合contenteditable类型的富文本元素):
from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager 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(service=Service(ChromeDriverManager().install())) driver.implicitly_wait(0.5) driver.maximize_window() driver.get("https://www.futbin.com/fut-card-creator/22") # 处理评分输入框 rating = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, "rating_change"))) # 用JS清空元素内容 driver.execute_script("arguments[0].textContent = '';", rating) rating.send_keys("90") # 处理位置输入框 position = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, "position_change"))) driver.execute_script("arguments[0].textContent = '';", position) position.send_keys("ST")
优先级建议:优先尝试方法1,这是官方推荐的标准方案;如果元素是富文本类型,方法3的成功率更高。
内容的提问来源于stack exchange,提问作者Devin Smith
相关产品推荐
相关产品推荐

