Большинство ссылок на YouTube находятся в iframe
, и javascript также должен работать. Попробуйте использовать селен. Следующее извлекает любые src
или href
, содержащие youtub
e. Я только ввожу ключевой iframe хостинг клипа YouTube. Вы можете зациклить все проверки iframes
.
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
def addItems(links, final):
for link in links:
ref = link.get_attribute('src') if link.get_attribute('src') is not None else link.get_attribute('href')
final.append(ref)
return final
url = "https://www.electronic-festivals.com/event/i-am-hardstyle-germany"
driver = webdriver.Chrome()
driver.get(url)
driver.switch_to.frame(driver.find_element_by_css_selector('.media-youtube-player'))
final = []
try:
links = WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "[href*=youtube] , [src*=youtube]")))
addItems(links, final)
except:
pass
finally:
driver.switch_to.default_content()
links = driver.find_elements_by_css_selector('[href*=youtube] , [src*=youtube]')
addItems(links, final)
for link in set(final):
print(link)
driver.quit()
Вы совершенно правы в размышлении, что существуют совместные действия здесь, у нас есть модульное веб-приложение, откуда само приложение собрано автоматически независимых компонентов (пакеты OSGi), где каждый пакет вносит свои собственные страницы, ресурсы, CSS и дополнительно JavaScript.
Мы не используем JSF (Spring MVC здесь), таким образом, я не могу прокомментировать добавленную сложность той платформы в контексте OSGi.
Большинство платформ или подходов там все еще придерживаются "старого" образа мыслей: один ВОЕННЫЙ файл, представляющий Ваше веб-приложение и затем много пакетов OSGi и сервисов, но почти ни один не интересуется модуляризацией самого GUI.
С OSGi первый вопрос решить: каков Ваш сценарий развертывания и кто основной контейнер? То, что я имею в виду, - то, что можно развернуть приложение на времени выполнения OSGi и использовать его инфраструктуру для всего. С другой стороны, можно встроить время выполнения OSGi в сервер традиционного приложения, и затем необходимо будет снова использовать некоторую инфраструктуру, конкретно Вы хотите использовать механизм сервлета AppServer.
Наш дизайн в настоящее время основан на OSGi как на контейнере, и мы используем HTTPService, предлагаемый OSGi как наш контейнер сервлета. Мы изучаем обеспечение своего рода прозрачного моста между внешним контейнером сервлета и OSGi HTTPService, но та работа продолжается.
, Таким образом, цель не состоит в том, чтобы просто вручить веб-приложение по OSGi, но также применять компонентную модель OSGI к самому веб-UI, делать это компонуемым, допускающим повторное использование, динамичным.
Это компоненты в системе:
Каждый пакет, который хочет внести страницы в наш веб-UI, должен опубликовать 1 или более Контроллеров как OSGi Services и удостовериться к [1 123], регистрируют ее собственный сервлет и ее собственные ресурсы (CSS, JSP, изображения, и т.д.) с OSGi HTTPService. Регистрация сделана с HTTPService, и ключевые методы:
httpService.registerResources () и httpService.registerServlet ()
, Когда сеть ui вносящий пакет активирует и публикует свои контроллеры, они автоматически взяты нашей центральной сетью ui пакет, и вышеупомянутый пользовательский Картопостроитель URL собирает эти сервисы Контроллера и сохраняет актуальную карту URL к Экземплярам контроллера.
Затем, когда Запрос HTTP наталкивается на определенный URL, он находит связанный контроллер и диспетчеризирует запрос туда.
Контроллер ведет свой бизнес и затем возвращает любые данные, которые должны быть представлены и название представления (JSP в нашем случае). Этот JSP расположен в пакете Контроллера и может быть получен доступ и представлен центральной сетью ui пакетом точно, потому что мы пошли и зарегистрировали местоположение ресурса в HTTPService. Наш центральный сопоставитель представления затем объединяет этот JSP с нашим центральным декоратором Sitemesh и выкладывает получающийся HTML клиенту.
В знают, что это - довольно высокий уровень, но не обеспечивая полноценное внедрение трудно полностью объяснить.
Наша ключевая точка изучения для этого должна была посмотреть , что Bernd Kolb сделал с его примером преобразование JPetstore в OSGi и использовать ту информацию для разработки нашей собственной архитектуры.
, по моему скромному мнению, существует в настоящее время слишком много шумихи и внимания на получение OSGi, так или иначе встроенной в традиционный Java основанные на EE приложения и очень мало мысли, помещаемой в фактическое использование идиом OSGi и ее превосходной компонентной модели для реального разрешения дизайна разбитых на компоненты веб-приложений.
Интересный набор сообщений. У меня есть веб-приложение, которое настраивается на на клиентское основание. Каждый клиент получает базовый набор компонентов и дополнительных компонентов в зависимости от того, в чем они зарегистрировались. Для каждого выпуска мы должны 'собрать' корректный набор сервисов и применить корректную конфигурацию меню (мы используем меню распорок) на основе клиента, который утомителен по меньшей мере. В основном это - та же кодовая база, но мы просто настраиваем навигацию, чтобы выставить или скрыть определенные страницы. Это, очевидно, не идеально, и мы хотели бы усилить OSGi для разбиения на компоненты сервисов. В то время как я вижу, как это сделано для сервисных API, и вид понимают, как ресурсы как CSS и сценарий Java и контроллеры (мы используем Spring MVC) могли также быть связаны, как Вы пойдете о контакте с 'крестом, сокращающим' проблемы как навигация страницы и общий поток операций особенно в сценарии, где Вы хотите динамично развернуть новый сервис и должны добавить навигацию к тому сервису. Может также быть другой 'крест, сокращающий' проблемы как сервисы, которые охватывают другие из других сервисов. Спасибо, Declan.
Выезд сервер SpringSource dm - сервер приложений, созданный полностью с точки зрения OSGi и поддержки модульных веб-приложений. Это доступно в бесплатных, и коммерческих версиях с открытым исходным кодом.
можно запустить путем развертывания стандартного ВОЕННОГО файла и затем постепенно повредить приложение в модули OSGi, или 'пакеты' в OSGi-говорят. Как Вы могли бы ожидать SpringSource, сервер имеет превосходную поддержку платформы Spring и связанных продуктов портфеля Spring.
Правовая оговорка: Я работаю над этим продуктом.
Мы использовали Restlet с OSGi успешно со встроенными услугами Http (под покрытиями, это - на самом деле Причал, но кот доступен также).
Restlet имеет нуль к минимальным потребностям конфигурации XML, и любая конфигурация, которую мы реализовываем, находится в BundleActivator (регистрирующий новые сервисы).
При создании страницы, мы просто обрабатываем соответствующие реализации услуги для генерации вывода, стиля декоратора. Новые включаемые пакеты добавят новую страницу, decorations/widgets в следующий раз его представленный.
REST дает нам хорошие чистые и значимые URL, несколько представлений тех же данных, и кажется расширяемой метафорой (немного глаголов, много существительных).
бонусом А для нас была обширная поддержка кэширования, конкретно Завершающий тег.
Смотрите на http://www.ztemplates.org , который прост и легок для изучения. Этот позволяет Вам помещать все связанные шаблоны, JavaScript и CSS в одну банку и использовать его прозрачно. Средство, о котором Вы даже не должны заботиться об объявлении необходимого JavaScript на Вашей странице при использовании обеспеченного компонента как платформа, делает это для Вас.
SpringSource seems to be working on an interesting modular web framework built on top of OSGi called SpringSource Slices. More information can be found in the following blog posts: