使用RSelenium在网页上查找最后一个网页元素的有效方法是什么?

时间:2017-07-20 23:04:31

标签: rselenium

我正在使用RSelenium自动向下滚动社交媒体网站并保存帖子。我想找到一个web元素的最后一个实例(具体来说,发布日期),但是使用我当前的方法(使用findElements()返回所有发布日期然后提取最后一个 - 请参阅下面的代码)如果我花了不可接受的长时间在页面上滚动了很长时间。

有人可以推荐一种快速查找网页上最后一个网页元素(特别是发布日期)的方法吗?例如,有没有办法可以使用findElement()(搜索第一个匹配),使其从页面底部而不是顶部开始?欢迎任何建议。

这是我的代码的一个简单示例,但如果我在页面上滚动了很长时间,则需要花费不可思议的长时间。

# 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()

1 个答案:

答案 0 :(得分:0)

我找到了解决上述问题的混乱解决方法。具体来说,我使用下面的内容获取最后的消息(包括日期),然后编写正则表达式来提取最后的日期

last_child = remDriver$findElement(using = "css selector", 
                               value = ".messageli:last-child")
last_child = unlist(last_child$getElementText())