练习 send_keys 输入、Ctrl+A/C/V/X 组合键、ENTER/TAB/ESC/BACKSPACE/DELETE 等常用按键。
本页仅演示单键操作:send_keys 输入文本、Keys.ENTER / TAB / ESC / BACKSPACE / DELETE / HOME / END / 方向键。
跳转至 组合键操作 查看 Ctrl+A/B/I/U 等双键及三键链式演示。
💡 学习路径:
⚠️ 注意:不同浏览器对某些特殊键(如 Keys.PAUSE / Keys.SHIFT)的行为可能略有差异,脚本中建议先聚焦再按键。
element.send_keys(Keys.ENTER) —— 方式一,直接发单键,简单场景首选ActionChains(driver).send_keys(Keys.ENTER).perform() —— 方式二,链式发单键,可与 click / 其他动作串在一起ElementNotInteractableException:send_keys 前必须先 click() 聚焦,目标元素不可见或 disabled 时也会抛此异常ActionChains 忘了 .perform():链式代码写完不调 perform 就静默不执行,Selenium 不会报错但效果全无Keys.CONTROL / Keys.SHIFT 对中文输入法失效:中文输入法激活时,Ctrl/Shift 键会被系统拦截,建议用 ActionChains 或临时切换英文输入法
单键速查 — Selenium Keys 模块常用单键,send_keys / ActionChains 均适用
Keys.F4 / Keys.F7 … 常量,send_keys 和
ActionChains 均可发送,只是浏览器可能无响应。
F5、F11、F12 是 Selenium 场景高频使用的三个功能键。
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.action_chains import ActionChains driver = webdriver.Chrome() driver.get("https://autotest-505.pages.dev/keyboard_op_tech.html") # ============================================================ # 写法 A:element.send_keys(Keys.XXX) —— 自动聚焦 + 发单键 # ============================================================ # ① TAB — 切换焦点到下一个可聚焦元素 user = driver.find_element(By.ID, "kb-user") user.click() # 先聚焦用户名 user.send_keys(Keys.TAB) # 焦点 → 密码框 pwd = driver.switch_to.active_element() print("①TAB: 当前焦点 =", pwd.get_attribute("id")) # ② ESCAPE —— 关闭搜索候选浮窗(非遮罩,直接对搜索框发 Esc) search = driver.find_element(By.ID, "kb-search") # 表单区搜索框,聚焦会弹候选浮窗 search.click() # 聚焦 → kb-search-dropdown 候选列表出现 search.send_keys("sel") # 输入几个字,候选浮窗仍显示 search.send_keys(Keys.ESCAPE) # 对搜索框发 Esc → 候选浮窗关闭 print("② ESC: 搜索候选浮窗已关闭") # ③ SPACE — 切换 checkbox 选中状态(比在 textarea 插空格更经典) agree = driver.find_element(By.ID, "kb-agree") # 表单区末尾的协议勾选框 agree.click() # 先聚焦 checkbox agree.send_keys(Keys.SPACE) # 第 1 次 SPACE → 选中 print("③SPACE 第 1 次: checkbox =", agree.is_selected()) # True agree.send_keys(Keys.SPACE) # 第 2 次 SPACE → 取消选中 print("③SPACE 第 2 次: checkbox =", agree.is_selected()) # False # ④ BACKSPACE / ⑤ DELETE — 删除前/后一个字符 area = driver.find_element(By.ID, "kb-area") area.click() area.send_keys("Hello World") # 先输入文本 area.send_keys(Keys.BACKSPACE) # 删末尾 d → "Hello Worl" area.send_keys(Keys.HOME) # 光标跳到行首(见⑦) area.send_keys(Keys.DELETE) # 删光标后 H → "ello Worl" print("④⑤BACKSPACE+DELETE: 当前文本 =", area.text) # ⑥ HOME / END — 光标跳到行首 / 行尾 area2 = driver.find_element(By.ID, "kb-area") area2.click() area2.send_keys("Python Selenium") area2.send_keys(Keys.HOME) # 光标移到 'P' 前 area2.send_keys("★") # 在行首插入标记 area2.send_keys(Keys.END) # 光标移到 'm' 后 area2.send_keys(" ✨") # 在行尾追加标记 print("⑥HOME+END: 当前文本 =", area2.text) # ★Python Selenium ✨ # ⑦ 方向键 — 在文本内移动光标 area3 = driver.find_element(By.ID, "kb-area") area3.click() area3.send_keys("ABCDE") area3.send_keys(Keys.HOME) # 光标到行首 for _ in range(3): # 右移 3 次 → 光标落在 'D' 前 area3.send_keys(Keys.ARROW_RIGHT) area3.send_keys("X") # 插入 → "ABCXDE" area3.send_keys(Keys.ARROW_LEFT) # 左移回到 'X' 前 area3.send_keys(Keys.ARROW_UP) # 上移(多行编辑时跳到上一行) area3.send_keys(Keys.ARROW_DOWN) # 下移(跳回原来的行) print("⑦方向键: 当前文本 =", area3.text) # 💡 清空文本最稳妥:area.clear() 比逐字发 BACKSPACE 高效得多 area.click() area.clear() # ============================================================ # 写法 B:ActionChains(driver).send_keys() —— 发到"当前焦点" # 适合把 click / send_keys 串在一条链上 # ⚠️ 别忘了 .perform(),否则所有动作静默不执行 # ============================================================ # 链式:聚焦密码框 → 发 TAB → 观察焦点是否跳到下一个元素 pwd_el = driver.find_element(By.ID, "kb-pwd") ActionChains(driver)\ .click(pwd_el)\ .send_keys(Keys.TAB)\ .perform() # 链式:聚焦搜索框 → 输入 → 发 ESC 关闭候选浮窗(对表单内元素发,而非 body) ActionChains(driver)\ .click(search)\ .send_keys("sel")\ .send_keys(Keys.ESCAPE)\ .perform() print("ActionChains ESC: 搜索候选浮窗已关闭") # 链式:聚焦多行区 → 输入 → HOME → 删首字 → END → 删尾字 area_b = driver.find_element(By.ID, "kb-area") ActionChains(driver)\ .click(area_b)\ .send_keys("HelloWorld")\ .send_keys(Keys.HOME)\ .send_keys(Keys.DELETE)\ .send_keys(Keys.END)\ .send_keys(Keys.BACKSPACE)\ .perform() print("⑧ActionChains 链式 HOME+DELETE+END+BACKSPACE: 已完成") # 链式:重新聚焦 kb-agree → SPACE 切换选中(和写法 A 效果一样) agree_b = driver.find_element(By.ID, "kb-agree") ActionChains(driver)\ .click(agree_b)\ .send_keys(Keys.SPACE)\ .perform() print("⑨ActionChains: 链式 SPACE 切换 checkbox 已完成") print("✅ 单键演示完成(TAB/ESC/SPACE/BACKSPACE/DELETE/HOME/END/方向键,两种写法)") driver.quit()