如何为Python语音识别模块设置监听超时?附YouTube搜索脚本
为YouTube语音搜索脚本添加语音监听超时控制
当然可以给语音监听设置定时器!speech_recognition库的listen()方法本身就支持超时参数,刚好能解决你等待输入过长的问题。我帮你调整了代码,不仅加上了超时设置,还优化了元素定位方式(避免绝对XPath容易失效的问题),并添加了异常处理让脚本更健壮。
修改后的完整代码
import speech_recognition as sr from selenium import webdriver from selenium.webdriver.common.by import By r = sr.Recognizer() drive = webdriver.Chrome() def gotosite(): drive.get("https://youtube.com") with sr.Microphone() as source: print("请说话(5秒内未输入将超时,最长发言10秒):") try: # 核心超时设置: # timeout = 5:等待用户开始说话的最长时间(5秒没声音就触发超时) # phrase_time_limit = 10:限制用户单次说话的最长时长(超过10秒自动停止监听) audio = r.listen(source, timeout=5, phrase_time_limit=10) text = r.recognize_google(audio) print(f"你说的是: {text}") # 用更稳定的CSS选择器替换绝对XPath,避免页面结构变化导致定位失败 searchbox = drive.find_element(By.CSS_SELECTOR, "input#search") searchbox.send_keys(text) searchbutton = drive.find_element(By.CSS_SELECTOR, "button#search-icon-legacy") searchbutton.click() except sr.WaitTimeoutError: print("超时未检测到语音输入,请重新运行脚本尝试") except sr.UnknownValueError: print("无法识别你说的内容,请清晰说话后重试") except Exception as e: print(f"运行时出现错误: {str(e)}") gotosite()
关键修改说明
- 超时参数配置:
listen()方法的两个参数直接解决你的问题:timeout:设置等待用户启动语音输入的最大时长,超过这个时间会抛出WaitTimeoutErrorphrase_time_limit:设置允许用户连续说话的最长时长,到点自动停止监听
你可以根据需求自由调整这两个数值(比如把timeout改成3秒,phrase_time_limit改成8秒)。
- 元素定位优化:把绝对XPath换成了基于ID的CSS选择器,绝对XPath非常依赖页面DOM结构,一旦YouTube调整页面布局就会失效,而ID选择器通常更稳定。
- 异常处理:添加了针对超时、识别失败的捕获逻辑,避免脚本直接崩溃,同时给用户明确的提示信息。
内容的提问来源于stack exchange,提问作者Raphael
相关产品推荐
相关产品推荐

