我正在处理动态加载的页面。
加载后,会出现“下一步”按钮,我想单击该按钮,直到加载完整的 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)因为按钮没有来而不寻找按钮(因为所有按钮都已加载)?
如果我理解正确,您的代码将按预期工作,直到您到达最后一页,然后它将继续查找下一个按钮,然后循环将不会退出。您可以通过检查该元素是否已启用来解决此问题。
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