Python脚本CMD启动ChromeDriver后停止执行,按键无响应求助
解决脚本在命令行/双击运行时按键无响应的问题
嘿,我来帮你搞定这个问题!你遇到的情况其实和ChromeDriver占用CMD窗口关系不大,核心原因是脚本在命令行或双击运行时,主线程执行完代码后就直接退出了——而IDLE是交互式环境,会自动保持主线程处于活跃状态,所以键盘监听能正常工作。
当你运行到keyboard.on_press(keyboardHandler)这一行时,键盘库确实注册了监听,但如果主线程没有被阻塞住,程序会立刻结束,监听线程也会跟着终止,自然就没法响应按键了。
修复方案:给主线程加个阻塞逻辑
只需要在代码末尾添加一段让主线程保持运行的代码就行,推荐两种简单的方式:
方式1:等待特定按键退出(比如ESC键)
在代码最后加上一行阻塞逻辑,同时记得退出时关闭浏览器,避免进程残留:
# 保持主线程运行,直到按下ESC键退出 keyboard.wait('esc') # 退出前关闭浏览器 driver.quit()
修改后的完整代码:
from selenium import webdriver from selenium.common.exceptions import NoSuchElementException from selenium.webdriver.support.ui import Select import keyboard from tkinter import * from tkinter import messagebox address = {} chrome_options = webdriver.ChromeOptions() chrome_options.add_experimental_option("excludeSwitches", ['enable-automation']) chrome_options.add_argument("--disable-extensions") chromeDriverPath = 'C:/ChromeDriver/chromedriver.exe' def keyboardHandler(keyboardEvent): if keyboardEvent.name == "f7": copyAddress(driver) elif keyboardEvent.name == "f9": paste(driver) # Script will launch browser when f7 is pressed keyboard.wait('f7') driver = webdriver.Chrome(chromeDriverPath, options=chrome_options) driver.get('http://www.ebay.co.uk/') keyboard.on_press(keyboardHandler) # 新增:阻塞主线程,直到按下ESC键 keyboard.wait('esc') # 退出前关闭浏览器 driver.quit()
方式2:用循环保持运行(带异常处理)
如果不想用特定按键退出,也可以用无限循环,同时处理Ctrl+C的中断信号:
import time try: while True: time.sleep(1) # 避免占用过多CPU资源 except KeyboardInterrupt: # 按下Ctrl+C时退出,同时关闭浏览器 driver.quit()
额外提示
- 别忘了补充实现
copyAddress和paste函数,不然按F7/F9会触发报错哦。 - 如果你担心ChromeDriver的控制台窗口干扰,可以给ChromeOptions添加
--headless=new参数,让浏览器在无头模式运行(不显示窗口)。
内容的提问来源于stack exchange,提问作者Matt Vincent
相关产品推荐
相关产品推荐

