Прокрутка до конца длинной динамической c страницы с RSelenium - PullRequest
0 голосов
/ 28 апреля 2020

Я разобрался, как прокручивать динамическую c страницу с помощью RSelenium, но длина страницы различна каждый раз, поэтому иногда для длинных страниц со многими элементами мой код не работает, и он останавливается до достижения нижней части страницы. У кого-нибудь есть идеи, как этого избежать? Заранее спасибо!

Мой пример кода: первый работает очень хорошо, было бы здорово сделать так, чтобы он прокручивался до конца страницы. Я как-то должен определить не конкретное количество свитков, как там 10, а назначить условие, чтобы повторять этот вид свитков до определенного момента. Но понятия не имею, как ...

    for(i in 1:10){ 
  cd$executeScript(paste("scroll(0,",i*10000,");"))
  Sys.sleep(3)    
}

###after 10 big scrolls starts mini scrolls like that###
element <- cd$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 == cd$getPageSource()[[1]]){
      flag <- FALSE
      writeLines(paste0("Scrolled down ",n*counter," times.\n"))
    } else {
      pagesource <- cd$getPageSource()[[1]]
    }
  } else {
    pagesource <- cd$getPageSource()[[1]]
  }
} #But unfortunately this line is also powerless before the real big pages so it stops before reaching the bottom
...