使用Selenium和R

时间:2017-09-16 11:22:40

标签: r selenium youtube captions

我正试图从Youtube获取自动字幕进行一些研究。我没有使用Selenium进行抓取,而是使用Youtube Data API和“tuber”包来提取字幕。这仅适用于用户提供的字幕轨道的情况。很遗憾,我需要分析的视频没有上传字幕。

我的想法是使用Selenium来访问特定内容。 HTML代码看起来像这样:

<div class="caption-window ytp-caption-window-bottom ytp-caption-window-rollup" id="caption-window-1" dir="ltr" tabindex="0" aria-live="assertive" style="touch-action: none; text-align: left; left: 21.2%; height: 40px; width: 287px; bottom: 2%;" data-layer="4" lang="en"><span class="captions-text"><span style="background: rgba(8, 8, 8, 0.75) none repeat scroll 0% 0%; box-decoration-break: clone; border-radius: 2px; font-size: 16px; color: rgb(255, 255, 255); fill: rgb(255, 255, 255); font-family: &quot;YouTube Noto&quot;,Roboto,&quot;Arial Unicode Ms&quot;,Arial,Helvetica,Verdana,&quot;PT Sans Caption&quot;,sans-serif;">&nbsp;load the our selenium package into this<span style="color: rgb(204, 204, 204); fill: rgb(204, 204, 204);">&nbsp;<br>&nbsp;session</span> so it's loaded now&nbsp;</span></span></div>

如您所见,纯字幕文本嵌入在<span></span>元素中。我使用此代码来检索标题文本。

install.packages("RSelenium")

require(RSelenium)

# starting driver on port/browser
rD <- rsDriver(port = 4555L, browser = "firefox")
# remote driver client-side
remDr <- rD[["client"]]
# navigate to web page
remDr$navigate("https://www.youtube.com/watch?v=qUKEPurS6-s")

# stop autoplay
play_button <- remDr$findElement(using = 'class', value = "ytp-play-button")
play_button$clickElement()

# activate subtitles
subtitle_button <- remDr$findElement(using = "class", value = "ytp-subtitles-button")
subtitle_button$clickElement()



# captions text element
caption_window <- remDr$findElement(using = "class", value = "captions-text")
# retrieve plain text
text <- caption_window$getElementText()

现在问我的问题:

如何捕获对dom元素所做的更改并在每次出现新单词时检索文本?我认为AJAX调用正在更新元素,但我不确切知道。

谢谢:)

0 个答案:

没有答案