crrri дождитесь загрузки страницы

#r #crrri

Вопрос:

Привет, я использую пакет crrri R для создания скребка, у меня есть асинхронная функция для сброса DOM, но я продолжаю получать пробелы, даже несмотря на то, что в цикле у меня есть страница$loadEventFired ().

Попытался создать событие времени выполнения, которое будет ждать, пока я не получу элементы со страницы, но я озадачен обещаниями и не могу заставить его работать. есть какие-нибудь идеи?

функция ожидания

 
  if(try<10 amp; Runtime$evaluate(expression = paste0('document.getElementsByClassName("',element_class,'").length'))%...>%.$result%...>%.$value%...>%.>0 ){
    Sys.sleep(0.5)
    wait_for_element(Runtime,element_class,try 1)
  }
 

весь код

   crrri::perform_with_chrome(extra_args = c('--blink-settings=imagesEnabled=false'),function(client) {
    Network <- client$Network
    Page <- client$Page
    Runtime <- client$Runtime
    Network$enable() %...>% {
      Page$enable()
    } %...>% {
      Network$setCacheDisabled(cacheDisabled = TRUE)
    } %...>% {
      Page$navigate(url = url)
    } %...>% {
      Page$loadEventFired()
    } %...>% {
      Sys.sleep(1)
    } %...>% {
      Runtime$evaluate(
        expression = 'document.documentElement.outerHTML'
      )
    } %...>% (function(result) {
      html <- result$result$value
      #cat(html, "n")
    })
  })
}```
 

Ответ №1:

Вместо Sys.sleep этого эта часть кода должна выглядеть примерно так.

                     } %...>% {
                        Page$loadEventFired()
                    } %>% wait(delay = 1) %...>% {
                        Runtime$evaluate(
                            expression = 'document.documentElement.outerHTML'
                        )