2016-09-08 20 views
14

Tôi muốn viết một kịch bản trong đó tôi sử dụng gói selen như thế này:Làm thế nào để tắt tất cả âm thanh trong chrome webdriver với selen

from selenium import webdriver 

driver = webdriver.Chrome() 
driver.get("https://www.youtube.com/watch?v=hdw1uKiTI5c") 

bây giờ sau khi nhận được URL mong muốn Tôi muốn tắt chrome âm thanh. Tôi có thể làm điều này bằng cách nào? một cái gì đó như thế này:

driver.mute() 

là nó có thể với bất kỳ Webdrivers khác? như Firefox hay ...?

Trả lời

21

Không chắc chắn nếu bạn có thể, thường cho bất kỳ trang nào, làm điều đó sau khi bạn đã mở trang, nhưng bạn có thể tắt tất cả âm thanh cho toàn bộ thời gian của phiên trình duyệt bằng cách thiết lập --mute-audio switcher:

from selenium import webdriver 

chrome_options = webdriver.ChromeOptions() 
chrome_options.add_argument("--mute-audio") 

driver = webdriver.Chrome(chrome_options=chrome_options) 
driver.get("https://www.youtube.com/watch?v=hdw1uKiTI5c") 

Hoặc, bạn có thể mute the HTML5 video player directly:

video = driver.find_element_by_css_selector("video") 
driver.execute_script("arguments[0].muted = true;", video) 

bạn có thể cần phải thêm một số chậm trễ trước đó để cho video được khởi tạo trước khi tắt tiếng nó. time.sleep() sẽ không phải là cách tốt nhất để làm điều đó - cách tốt hơn là đăng ký loadstart media event - việc triển khai Python có thể được tìm thấy here.

Để tóm tắt - hoàn thành triển khai:

from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 
from selenium import webdriver 

driver = webdriver.Chrome() 
driver.set_script_timeout(10) 

driver.get("https://www.youtube.com/watch?v=hdw1uKiTI5c") 

# wait for video tag to show up 
wait = WebDriverWait(driver, 5) 
video = wait.until(EC.visibility_of_element_located((By.TAG_NAME, 'video'))) 

# wait for video to be initialized 
driver.execute_async_script(""" 
    var video = arguments[0], 
     callback = arguments[arguments.length - 1]; 

    video.addEventListener('loadstart', listener); 

    function listener() { 
     callback(); 
    }; 
""", video) 

# mute the video 
driver.execute_script("arguments[0].muted = true;", video) 
Các vấn đề liên quan