यूट्यूब + सेलेनियम (पायथन) - वीडियो समाप्त होने पर कैसे पता चलेगा?
सारांश
मैं में:
त्वरित सवाल एक वीडियो में यह में खेलने के साथ एक यूट्यूब पेज की सामग्री को समझने पर [संपादित हल, बीच में ही प्रश्न के पाठ में देखते हैं] ब्राउज़र आधारित जीयूआई के हिस्से के रूप में, यूट्यूब पर वीडियो चलाने के लिए सेलेनियम का उपयोग करें।
मुझे यह जानने की ज़रूरत है कि वीडियो कब खेलना समाप्त हो गया है, क्योंकि जीयूआई कुछ और करता है (उदाहरण के लिए ब्राउज़र में स्थानीय HTML फ़ीड करें)।
कोड स्निपेट और इस बात मैं कर सकता time.wait()
वीडियो की लंबाई के लिए पर
import os, time
from selenium import webdriver
# [...]
chromedriver = 'path_to_chromedriver_binary' # substitute as appropriate
driver = webdriver.Chrome(chromedriver)
youtube_link = 'https://www.youtube.com/watch?v=BHjg6cTxmrQ'
driver.get(youtube_link)
सवाल उठाते हैं।
हालांकि, मुझे आश्चर्य है कि क्या मैं सेलेनियम ड्राइवर के माध्यम से यूट्यूब पेज से पूछताछ कर सकता हूं और थोड़ी देर में प्ले-थ्रू के लिए शेष समय गेज कर सकता हूं (मुझे इस जानकारी को यूट्यूब पेज से निकालने के तरीके से परिचित नहीं है)
धन्यवाद!
[संपादित करता समाधान के साथ]
सेलेनियम समाधान
धन्यवाद Stanjer के लिए, और this answer और this other answer करने के लिए, आप इस विधि के माध्यम से movie_player
स्थिति प्राप्त कर सकते हैं:
player_status = driver.execute_script("return document.getElementById('movie_player').getPlayerState()")
(स्क्रिप्ट की शुरुआत में "वापसी" जोड़ने के लिए मत भूलना)
सेलेनियम वैकल्पिक समाधान
कम सुरुचिपूर्ण लेकिन उनका कहना है लायक: driver.text
रिटर्न एक स्ट्रिंग इस स्ट्रिंग प्रारूप '01:00/02:00' में वीडियो टाइमर का प्रतिनिधित्व। इसलिए आप देख सकते हैं कि वीडियो इन पंक्तियों के साथ कुछ द्वारा के माध्यम से निभाई है:
driver.find_element_by_class_name("ytp-time-current").text
जटिलता और अगले:
video_is_playing = True
while video_is_playing:
time.sleep(1)
video_is_playing = not(driver.text[:4] == driver.text[-4:])
[संपादित करें] जोस की टिप्पणी के अनुसार, इस जानकारी भी एक्सेस कर सकता है प्रश्न
मुझे वीडियो को अधिकतम प्रारूप में और ऑटोप्ले के साथ खोलने की आवश्यकता है।
इसका मतलब यह है कि मैं इस यूआरएल फोन:,
youtube.com/v/<video_code>?rel=0&autoplay=1
हालांकि यह एक बहुत ही कम एचटीएमएल जो केवल एक एम्बेड कोड शामिल रिटर्न उदाहरण के अनुसार यहाँ:
<HTML><HEAD></HEAD>
<BODY leftMargin=0 scroll=no topMargin=0>
<EMBED height="100%"
type=application/x-shockwave-flash
width="100%"
src=https://www.youtube.com/v/Fsc-oT9PsSQ?rel=0&autoplay=1
fullscreen="yes">
</BODY>
</HTML>
तो मैं कोई movie_player
है यहां तत्व
दृष्टिकोण 1 - क्या मैं टाइमर को application/x-shockwave-flash
से निकाल सकता हूं?
दृष्टिकोण 2 - यदि मैं क्लासिक यूट्यूब पेज में यूट्यूब वीडियो लॉन्च करता हूं, तो मैं movie_player
को अपने आप को अधिकतम करने के लिए कैसे कह सकता हूं?
(ध्यान दें: this answer और this answer शायद दृष्टिकोण 2 हल करने के लिए जानकारी होते हैं, अगर मैं इस सेलेनियम के साथ काम करने के लिए मिलता पोस्ट करेंगे)
हा, ऊपर उठाने की कोशिश कर रहा है लेकिन पर्याप्त प्रतिनिधि नहीं है! – Pythonic