Я очищаю источник видео с помощью Selenium и BeautifulSoup.Я хочу спросить, есть ли способ извлечь файл m3u8 (содержимое HLS) вместо файла blob с помощью Firefox или Chrome?
Следующий код очищает источник видео в виде строки списка воспроизведения с помощью веб-драйвера Selenium Safari.
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium import webdriver
from bs4 import BeautifulSoup
import re
import urllib.request
def get_all_channels(base: str="https://www.telewebion.com/channels"):
channels_url = urllib.request.urlopen(f"{base}")
soup_channels_url = BeautifulSoup(channels_url, "lxml")
# create a list of all channels
all_channels_list = []
for a in soup_channels_url.select('.no-featured a'):
all_channels_list.append(a['href'])
# all_channels_list.append(a['href'], a.get_text(strip=True))
# return the list
return all_channels_list
def get_video_src(url: str, base: str="https://www.telewebion.com"):
channel_url = f"{base}{url}"
wd = webdriver.Safari()
# wd = webdriver.Chrome()
# wd = webdriver.Firefox(executable_path='/usr/local/bin/geckodriver')
wd.get(channel_url)
WebDriverWait(wd, 6000).until(EC.visibility_of_element_located(
(By.CLASS_NAME, "position-relative")))
html_page = wd.page_source
# Now use html_page
soup = BeautifulSoup(html_page, "lxml")
video = soup.find_all("video", class_="rmp-object-fit-contain")
video_src = video[0]['src']
wd.quit()
return video_src
for channel in get_all_channels():
print(get_video_src(channel))
Результатами являются строки списка воспроизведения m3u8 (содержимое HLS), которые меня интересуют, но это не масштабируемое решение, поскольку работает только при установленном Safari.Веб-драйверы Firefox / Chrome Selenium возвращают строки BLOB-объектов.Моя конечная цель - загрузить расширенный плейлист M3U (m3u8) (или любой другой тип видеопотока), а не порции видеопотока, чтобы использовать его в качестве источника видео дополнений Kodi.
PS Источники видеоявляются динамическими и визуализируются JavaScript для загрузки их содержимого;поэтому я использовал Selenium для вызова браузера.