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

如何为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:设置等待用户启动语音输入的最大时长,超过这个时间会抛出WaitTimeoutError
    • phrase_time_limit:设置允许用户连续说话的最长时长,到点自动停止监听
      你可以根据需求自由调整这两个数值(比如把timeout改成3秒,phrase_time_limit改成8秒)。
  • 元素定位优化:把绝对XPath换成了基于ID的CSS选择器,绝对XPath非常依赖页面DOM结构,一旦YouTube调整页面布局就会失效,而ID选择器通常更稳定。
  • 异常处理:添加了针对超时、识别失败的捕获逻辑,避免脚本直接崩溃,同时给用户明确的提示信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 15:07:47