如何解决RSelenium:尝试如果 findElement 成功,然后单击它,错误:“类型 'S4' 的对象不是可子集的”
我正在用 RSelenium
抓取 https://www.tandfonline.com/loi/sabo20。
我想点击每个 li
的文本以年份 2015
到 2021
结尾。 xpath 运行良好。
可能缺少一年(例如 2021
),这就是我使用 try()
方法的原因。
URL <- "https://www.tandfonline.com/loi/sabo20"
# open RSelenium
rD <- RSelenium::rsDriver(browser = "chrome",chromever = "90.0.4430.24",port = 4546L,verbose = F)
remDr <- rD[["client"]]
remDr$navigate(URL)
Sys.sleep(4)
for (yyyy in c(2015:2021)) {
error <- "Error : \t Summary: NoSuchElement\n \t Detail: An element Could not be located on the page using the given search parameters.\n \t class: org.openqa.selenium.NoSuchElementException\n\t Further Details: run errorDetails method\n"
volumes <- try(unlist(
remDr$findElement(
using = "xpath",paste0(
"//li[substring(@id,string-length(@id) - string-length('",yyyy,"') +1) = '","']/div"
)
)
))
if(volumes[1] == error)
break;
volumes$clickElement()
}
不幸的是,如果 if(volumes[1] == error)
成功,findElement()
会导致错误:
卷错误[1]:“S4”类型的对象不可子集
在我remDr$findElement()
之前如何检查clickElement()
是否成功?
解决方法
解决方案可能是trycatch
下面是一个例子。
URL <- "https://www.tandfonline.com/loi/sabo20"
# open RSelenium
rD <- RSelenium::rsDriver(browser = "chrome",chromever = "90.0.4430.24",port = 4546L,verbose = F)
remDr <- rD[["client"]]
remDr$navigate(URL)
Sys.sleep(4)
for (yyyy in c(1983:2021)) {
tryCatch(expr = {
volumes <- unlist(
remDr$findElement(
using = "xpath",paste0(
"//li[substring(@id,string-length(@id) - string-length('",yyyy,"') +1) = '","']/div"
)
)
)
volumes$clickElement()
Sys.sleep(4)
},error =function(e){
message("if you want you can break,but it not necessary")
})
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。