2

我正在尝试从 Youtube 获取自动字幕以进行一些研究。我没有使用 Selenium 进行抓取,而是使用带有“tuber”包的 Youtube Data API 来提取字幕。这仅在用户提供字幕轨道的情况下才有效。不幸的是,我需要分析的视频没有上传字幕。

我的想法是使用 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 调用正在更新元素,但我并不确切知道。

谢谢 :)

4

0 回答 0