簡體   English   中英

如何使用 Selenium Python 保存播放音頻

[英]How to save playing audio with Selenium Python

我正在使用 IBM Watson 開發驗證碼求解器,一切都很好,我只需要將正在播放的音頻保存到一個文件中,然后可以使用 watson 解析該文件。 我不知道如何 go 關於那個,我在這里沒有找到任何東西。 如果可能的話,我不想要一些復雜的請求等,只需將播放的音頻保存到文件中。 或下載音頻,但我嘗試使用 chrome_options 設置下載位置,但它不起作用任何幫助將不勝感激

我的代碼:

import os
import time
import random
import requests
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from multiprocessing import Process
import ibm_watson
from ibm_watson import SpeechToTextV1
from ibm_cloud_sdk_core.authenticators import IAMAuthenticator
from ibm_watson.websocket import RecognizeCallback, AudioSource

chrome_options = Options()
chrome_options.add_argument("--mute-audio")
chrome_options.add_argument ("download.default_directory=/home/valentino/")
driver = webdriver.Chrome(options=chrome_options)

apikeywatson = 'C2f79A8ENbeUmWw-1DwTMd_v4IgCdCjqKpx21PsRaKan'
urlwatson = 'https://api.eu-de.speech-to-text.watson.cloud.ibm.com/instances/9a22253e-7fc5-4c67-b85b-5ad54db8282d'
authibm = IAMAuthenticator(apikeywatson)
stt = SpeechToTextV1(authenticator=authibm)
stt.set_service_url(urlwatson)

driver.get('https://client-demo.arkoselabs.com/github')
time.sleep(4)
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, "iframe[src^='https://client-api.arkoselabs.com/fc/gc/']")))
time.sleep(2)
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "span[class='fc_meta_audio_btn']"))).click()
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "audio_play"))).click()

我相信我也經歷過類似的情況。 如果您的文件已成功下載,但在默認目錄中下載,而不是您想要的目錄,我會告訴您如何解決此問題以及如何解決此問題。

  1. 不要使用相對路徑,嘗試使用絕對路徑:

    chrome_options.add_argument (f"download.default_directory={}/home/valentino/")

  2. 這可能行不通,嘗試用反斜杠替換正斜杠:

    chrome_options.add_argument (f"download.default_directory={}\\home\\valentino\\")

  3. 如果這對您有用,那么您對 go 很好。 但這對我不起作用。 我不得不通過手動將文件從下載的文件夾移動到我想要的文件夾來解決這個問題。 你可以使用這樣的東西:

    from shutil import move

    #verify this path as it varies from OS to OS
    default_file_download_path = 'C:\\Users\\UserName\\Downloads\\' 
    destination_path = 'home\\valentino\\'
    
    downloaded_file_name = [x for x in os.listdir(default_file_download_path)
                            if "audio_verification_challenge" in x][0]
    
    move(default_file_download_path+downloaded_file_name , destination_path+downloaded_file_name)

是的,最后一個選項可能看起來很丑陋,但這是我使它適用於我的用例的唯一方法。


更新

如果您仔細檢查 HTML,它們會為每個音頻文件提供一個甜蜜的 SRC 鏈接。 您需要使用簡單的請求調用從該 SRC 檢索文件,然后將其保存在本地。 我相信這是最簡單和最快的方法。

driver.get('https://client-demo.arkoselabs.com/github')
time.sleep(4)
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, "iframe[src^='https://client-api.arkoselabs.com/fc/gc/']")))

audio_src = driver.find_element_by_xpath('//audio[@preload="auto"]').get_attribute('src')
content = requests.get(audio_src).content
# save the content into a file where you would want to
open('your_desired_location\\captcha_file.wav', 'wb').write(content)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM