如何通过Selenium Python保存页面正在播放的验证码音频文件
下载配置失效的核心原因
- 你之前通过
add_argument传入download.default_directory的写法完全无效:这个参数属于Chrome的内部用户偏好,不是可识别的启动命令行参数,Chrome加载时会直接忽略,这就是配置不生效的根本原因。
零复杂请求的音频保存实现方案
- 修正Chrome下载偏好配置
替换你之前错误的路径配置代码,改用实验性偏好项的方式传入下载规则,确保所有触发的浏览器自动下载都会存到指定目录:chrome_options.add_argument("--mute-audio") # 替换原错误的download.default_directory配置 chrome_options.add_experimental_option("prefs", { "download.default_directory": "/home/valentino/", "download.prompt_for_download": False, "download.directory_upgrade": True, "safebrowsing.enabled": True }) driver = webdriver.Chrome(options=chrome_options) - 捕获正在播放的验证码音频源
你当前流程里点击audio_play按钮后,页面会自动加载音频资源到<audio>标签中,不需要额外发独立请求,直接从元素属性拿到当前播放的音频地址即可:# 接在你原有代码的点击audio_play之后 # 等待音频元素加载完成,获取正在播放的音频源地址 audio = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.TAG_NAME, "audio")) ) audio_url = audio.get_attribute("src") - 在页面上下文触发自动下载
直接在当前页面执行JS,利用页面已有的鉴权上下文拉取音频资源,触发浏览器自带的下载流程,全程不涉及独立的requests请求操作,不会出现跨域、鉴权不匹配的问题:driver.execute_script(f""" fetch('{audio_url}') .then(res => res.blob()) .then(blob => {{ const blobUrl = URL.createObjectURL(blob); const downloadLink = document.createElement('a'); downloadLink.href = blobUrl; downloadLink.download = 'captcha_audio.wav'; document.body.appendChild(downloadLink); downloadLink.click(); URL.revokeObjectURL(blobUrl); }}) """) - 效果说明:因为已经配置了自动下载规则,触发下载后音频文件会直接存到你指定的
/home/valentino/路径下,全程不需要处理弹窗、不需要构造请求头、不需要手动处理音频二进制流,保存完成后直接读取本地文件传给IBM Watson做语音解析即可。
注意:保留
--mute-audio参数不会影响音频资源的正常捕获和下载,只是让本地不会放出验证码的播放声音,避免环境噪音干扰。
内容的提问来源于stack exchange,提问作者valentino1337
相关产品推荐
相关产品推荐

