使用 RSelenium 查找网页上最后一个 Web 元素的有效方法是什么?
What's an efficient way to find the last web element on a web page using RSelenium?
我正在使用 RSelenium 自动向下滚动社交媒体网站并保存 posts。我想找到 Web 元素的最后一个实例(特别是 post 日期),但是使用我当前的方法(使用 findElements() 到 return 所有 post 日期花费的时间长得令人无法接受然后提取最后一个 - 请参阅下面的代码)如果我向下滚动了很长的页面。
谁能推荐一种快速查找网页上最后一个网络元素(特别是 post 日期)的方法?例如,有没有一种方法可以使用 findElement()(搜索 first 匹配项),使其从页面底部而不是顶部开始?欢迎提出任何建议。
这是我的代码的一个简单示例,但如果我向下滚动页面很长一段距离,它会花费很长时间。
# Load webpage of interest
library(RSelenium)
library(rvest)
rD = rsDriver(browser = "firefox")
remDr = rD[["client"]]
url = paste0("https://stocktwits.com/symbol/NZDCHF")
remDr$navigate(url)
# Scroll down page three times, loading new content each time.
for (i in 1:3) { #Only scrolling 3 times for illustration
remDr$executeScript("window.scrollTo(0,document.body.scrollHeight);")
Sys.sleep(2) #delay by 3sec to give chance to load
}
# Get date of last post. WORKS BUT TAKES FOREVER IF I'VE SCROLLED MANY TIMES
e = remDr$findElements("css", ".message-date")
last_date = e[[length(e)]]$getElementText()
我找到了解决上述问题的凌乱解决方法。具体来说,我使用下面的方法获取最后的 message(包括日期),然后写了一个正则表达式来提取最后的 date.
last_child = remDriver$findElement(using = "css selector",
value = ".messageli:last-child")
last_child = unlist(last_child$getElementText())
我正在使用 RSelenium 自动向下滚动社交媒体网站并保存 posts。我想找到 Web 元素的最后一个实例(特别是 post 日期),但是使用我当前的方法(使用 findElements() 到 return 所有 post 日期花费的时间长得令人无法接受然后提取最后一个 - 请参阅下面的代码)如果我向下滚动了很长的页面。
谁能推荐一种快速查找网页上最后一个网络元素(特别是 post 日期)的方法?例如,有没有一种方法可以使用 findElement()(搜索 first 匹配项),使其从页面底部而不是顶部开始?欢迎提出任何建议。
这是我的代码的一个简单示例,但如果我向下滚动页面很长一段距离,它会花费很长时间。
# Load webpage of interest
library(RSelenium)
library(rvest)
rD = rsDriver(browser = "firefox")
remDr = rD[["client"]]
url = paste0("https://stocktwits.com/symbol/NZDCHF")
remDr$navigate(url)
# Scroll down page three times, loading new content each time.
for (i in 1:3) { #Only scrolling 3 times for illustration
remDr$executeScript("window.scrollTo(0,document.body.scrollHeight);")
Sys.sleep(2) #delay by 3sec to give chance to load
}
# Get date of last post. WORKS BUT TAKES FOREVER IF I'VE SCROLLED MANY TIMES
e = remDr$findElements("css", ".message-date")
last_date = e[[length(e)]]$getElementText()
我找到了解决上述问题的凌乱解决方法。具体来说,我使用下面的方法获取最后的 message(包括日期),然后写了一个正则表达式来提取最后的 date.
last_child = remDriver$findElement(using = "css selector",
value = ".messageli:last-child")
last_child = unlist(last_child$getElementText())