Очистить внутренний кадр HTML

У меня есть Python script, который сбрасывает атрибут src элемента <video> на странице html. С помощью инспектора браузера на видео на этой странице, я могу видеть элемент видео, который мне нужно очистить, но просмотр исходного файла непосредственно показывает только файлы JavaScript с использованием ember-приложений.

Что мне нужно сделать для доступа к разметке "внутреннего фрейма", которая содержит элемент <video>, чтобы я мог очистить атрибут src?

Отредактировано так, что оно не так широко

Ответ 1

Не нужно идти полным маршрутом браузера/селена. Просто сделайте немного больше исследований, и вы увидите, как это работает:

Для URL-адреса vine https://vine.co/v/i3pQ70vK3iv вам нужен json файл, который описывает видео.

Так просто очистить URL https://archive.vine.co/posts/i3pQ70vK3iv.json. Это вернет файл как:

{
  "username": "Bleacher Report",
  "userIdStr": "906307026416705536",
  "postId": 1352573572862066700,
  "verified": 1,
  "description": "😳💯",
  "created": "2016-06-09T06:14:43.000000",
  "permalinkUrl": "https://vine.co/v/i3pQ70vK3iv",
  "userId": 906307026416705500,
  "profileBackground": "0x333333",
  "vanityUrls": [
    "BleacherReport"
  ],
  "entities": [],
  "postIdStr": "1352573572862066688",
  "comments": 293,
  "reposts": 2384,
  "videoLowURL": "http://mtc.cdn.vine.co/r/videos_r2/DC69CF91B61352573549554077696_558739dd749.17.0.4126553130190094381.mp4?versionId=oVIxbcFKL5aaqsbMx_q.7wt4zEnhgQ0w",
  "loops": 19182516,
  "videoUrl": "http://mtc.cdn.vine.co/r/videos/DC69CF91B61352573549554077696_558739dd749.17.0.4126553130190094381.mp4?versionId=av0W8OaLWSzghq.9__iKdSU4y75FDNg.",
  "videoDashUrl": "http://mtc.cdn.vine.co/r/videos_dashhd/DC69CF91B61352573549554077696_558739dd749.17.0.4126553130190094381.mp4?versionId=98zVYTYAx16DJka7Oa1yQu20utGrQch9",
  "thumbnailUrl": "http://v.cdn.vine.co/r/thumbs/DC69CF91B61352573549554077696_558739dd749.17.0.4126553130190094381.mp4.jpg?versionId=7LmJNEI3C6bsHkF3t9jqu5k1O2xEHo9l",
  "explicitContent": 0,
  "likes": 6593
}

Вы найдете URL-адрес самого видео в качестве атрибута videoUrl в возвращаемом json.

Ответ 2

JS запускается на клиенте для заполнения видеоэлементов страницы, поэтому вам потребуется веб-драйвер, чтобы страница полностью заполнялась для доступа к элементам. Вы можете попробовать селен:

from selenium import webdriver

driver = webdriver.Firefox()
driver.get("https://vine.co/v/i3pQ70vK3iv")
video = driver.find_element_by_tag_name('video')
print video.get_attribute('src')
driver.close()

Если вы хотите запустить драйвер без головок (без gui), см. Возможно ли запустить веб-драйвер selenium (Firefox) без графического интерфейса?