我正在尝试从 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: "YouTube Noto",Roboto,"Arial Unicode Ms",Arial,Helvetica,Verdana,"PT Sans Caption",sans-serif;"> load the our selenium package into this<span style="color: rgb(204, 204, 204); fill: rgb(204, 204, 204);"> <br> session</span> so it's loaded now </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 调用正在更新元素,但我并不确切知道。
谢谢 :)