R Selenium 等待“下一步”按钮并单击直到不再出现

问题描述 投票:0回答:1

我正在处理动态加载的页面。

加载后,会出现“下一步”按钮,我想单击该按钮,直到加载完整的 div 列表(= 直到该按钮不再存在)。

但是由于是动态加载,我需要首先查询 DOM 来确定按钮是否存在。

就像现在一样,一个

while
循环查找按钮(如果不是,则进行一些随机等待 - 以解决有时加载缓慢的问题)。如果存在,则单击该按钮并将按钮侦听器设置回
NULL

这会一直有效,直到最后,当按钮really不再存在时,因为所有内容都已加载。然后 while 循环继续寻找按钮。

click_count = 0
click_verifier = NULL

while(is.null(click_verifier)){
  click_verifier = tryCatch({
    driver$findElement("id", "lib-rnl-lib-rnl-laadMeerBtn")},
                            error = function(e){NULL})
  randsleep = sample(seq(0.5, 1.0, by = 0.001), 1)
  Sys.sleep(randsleep)
  print(paste0('- - - sleeping for: ', randsleep, ' seconds.'))
  
  if(!is.null(click_verifier)){
    
    load_more_button = driver$findElement("id", "lib-rnl-lib-rnl-laadMeerBtn")
    load_more_button$clickElement()
    click_count = click_count + 1
    print(paste0('Clicked: ', click_count, "x"))
    click_verifier = NULL
    
  }
}

有没有一种巧妙的方法来区分(1)由于动态加载而继续寻找按钮和(2)因为按钮没有来而不寻找按钮(因为所有按钮都已加载)?

rvest rselenium
1个回答
0
投票

如果我理解正确,您的代码将按预期工作,直到您到达最后一页,然后它将继续查找下一个按钮,然后循环将不会退出。您可以通过检查该元素是否已启用来解决此问题。

library(RSelenium)

url = 'https://fantasy.espn.com/football/players/projections'

remdr = rsDriver(remoteServerAddr = "localhost",
                      port = 4445L,
                     browser = 'firefox')



driver = remdr$client

driver$navigate(url)


next_button_visible = TRUE

while (next_button_visible == TRUE) {

  next_button = driver$findElement(using = 'xpath',
     '/html/body/div[1]/div[1]/div/div/div[5]/div[2]/div[3]/div/div/div/div/nav/button[2]')
  next_button_visible = next_button$isElementEnabled()
  next_button$clickElement()

  Sys.sleep(5)
 
  
}


创建于 2024 年 12 月 12 日,使用 reprex v2.1.1

© www.soinside.com 2019 - 2024. All rights reserved.