1

嗨,我正在使用 crrri R 包构建刮板,我有一个异步函数来转储 DOM,但即使我在循环中有 Page$loadEventFired(),我仍然会得到空白。

试图创建运行时事件,该事件将等到我从页面中获取元素,但我对承诺感到困惑,无法让它发挥作用。有任何想法吗?

等待函数


  if(try<10 & 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")
    })
  })
}```
4

1 回答 1

1

而不是Sys.sleep,那部分代码应该看起来像。

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

于 2021-08-05T18:51:33.997 回答