R:抓取一个动态加载的页面,滚动时间长但有限,直到结束(使用 RSelenium?)

R: Scraping a dynamically loading page with long but finite scrolling until the end (with RSelenium?)

This page 几乎看起来是无限的,因为它在动态加载页面中显示超过 6.000 个配置文件。

A similar one 只显示 310 个配置文件,因此滚动到最后不需要那么多时间。

有没有一种方法可以编写一个代码,通过滚动到末尾来抓取两个页面?

出于类似的目的,我使用了带有 RSelenium 的代码,如下所示:

journal_url <- "https://www.frontiersin.org/journals/photonics#editorial-board"

rD <- RSelenium::rsDriver(browser="chrome", port=4546L, verbose=F, chromever="87.0.4280.20")
    
for(i in 1:5){      
    remDr$executeScript(paste("scroll(0,",i*10000,");"))
    Sys.sleep(3)    
}

但在目前的情况下,虽然像 for(i in 1:5) 那样滚动五次对于第二页(有 350 个配置文件)可能就足够了,但对于第一个页面(有 6.000 个配置文件)来说就不够了。如果有人能给我指出可以处理不同大小页面的单一代码,我将不胜感激!

相信你会在这里找到答案,

https://github.com/yusuzech/r-web-scraping-cheat-sheet#223-simulating-scrolls-clicks-text-inputs-logins-and-other-actions

在副标题“向下滚动到最后(如果页面太多,不推荐)”下。

编辑:这是来自 link.

的建议代码
element <- driver$findElement("css", "body")
flag <- TRUE
counter <- 0
n <- 5
while(flag){
    counter <- counter + 1
    #compare the pagesource every n(n=5) time, since sometimes one scroll down doesn't render new content
    for(i in 1:n){
        element$sendKeysToElement(list("key"="page_down"))
        Sys.sleep(2)
    }
    if(exists("pagesource")){
        if(pagesource == driver$getPageSource()[[1]]){
            flag <- FALSE
            writeLines(paste0("Scrolled down ",n*counter," times.\n"))
        } else {
            pagesource <- driver$getPageSource()[[1]]
        }
    } else {
        pagesource <- driver$getPageSource()[[1]]
    }
}