在级别3 - Rselenium上递归索引失败
Recursive indexing failed at level 3 - Rselenium
我使用RSelenium。下面的代码是一个Javascript命令。我在循环中使用了它,它在第一次迭代中运行良好。但是在第二次迭代时我遇到了一个问题。
下面是我的代码:
remDr$executeScript("window.setInterval(function() {window.scrollBy(0, 300);}, 100)", args = list())
我收到的错误是:
Error in out[[wInd]] : recursive indexing failed at level 3
下面是可复制的示例:
remDr <- remoteDriver(browserName = "chrome", nativeEvents=FALSE)
remDr$open()
url_site <-'https://www.aliexpress.com/category/1909/digital-camera.html?site=glo&pvId=351-350381&attrRel=or&isrefine=y'
remDr$navigate(url_site) # navigates to webpage
remDr$setImplicitWaitTimeout(10000000)
remDr$setTimeout(type = "page load", milliseconds = 10000000)
Sys.sleep(6)
# remDr$executeScript("document.getElementById('alibaba-login-box').getElementById('fm-login-id').value = 'tokenspy@gmail.com';alert();", args = list())
master <- data.frame()
n <- 3 # number of pages to scrape. 80 pages in total. I just scraped 5 pages for this example.
for(i in 1:n) {
start <- i
if (i == 1 ) {
i<-''
}
url_site<-(sprintf('https://www.aliexpress.com/category/1909/digital-camera/%s.html?isrefine=y&site=glo&pvId=351-350381&tag=', i))
cat('display results:',(start),'-',(start+29) ,'in page', start, 'now 'n',url_site,''n')
site <- url_site
# Sys.sleep(5)
remDr$navigate(site)
remDr$setImplicitWaitTimeout(10000000)
remDr$setTimeout(type = "page load", milliseconds = 10000000)
# Sys.sleep(5)
remDr$executeScript("my_interval = window.setInterval(function() {window.scrollBy(0, 300);}, 100);return;", args = list())
# Sys.sleep(5)
cat('a')
NamewebElems <- remDr$findElements(using = 'css selector', ".detail h3 a")
remDr$executeScript("clearInterval(my_interval);", args = list())
}
我注意到如果我删除这行
NamewebElems <- remDr$findElements(using = 'css selector', ".detail h3 a")
,问题就解决了,迭代可以正常工作。但问题是,我需要这一行,在第二次循环,错误弹出和脚本停止。
我发现了一个解决方案,显然不是最好的,但我测试了,它的工作。每次注入javascript代码时都使用try ()
。错误仍然会弹出,但此方法将防止迭代停止。同时,函数被成功触发。所以你的代码应该是这样的:try(remDr$executeScript("window.setInterval(function() {window.scrollBy(0, 300);}, 100)", args = list()))
这个工作和测试:
remDr <- remoteDriver(browserName = "chrome", nativeEvents=FALSE)
remDr$open()
url_site <-'https://www.aliexpress.com/category/1909/digital-camera.html?site=glo&pvId=351-350381&attrRel=or&isrefine=y'
remDr$navigate(url_site) # navigates to webpage
remDr$setImplicitWaitTimeout(10000000)
remDr$setTimeout(type = "page load", milliseconds = 10000000)
Sys.sleep(6)
# remDr$executeScript("document.getElementById('alibaba-login-box').getElementById('fm-login-id').value = 'tokenspy@gmail.com';alert();", args = list())
master <- data.frame()
n <- 3 # number of pages to scrape. 80 pages in total. I just scraped 5 pages for this example.
for(i in 1:n) {
start <- i
if (i == 1 ) {
i<-''
}
url_site<-(sprintf('https://www.aliexpress.com/category/1909/digital-camera/%s.html?isrefine=y&site=glo&pvId=351-350381&tag=', i))
cat('display results:',(start),'-',(start+29) ,'in page', start, 'now 'n',url_site,''n')
site <- url_site
# Sys.sleep(5)
remDr$navigate(site)
remDr$setImplicitWaitTimeout(10000000)
remDr$setTimeout(type = "page load", milliseconds = 10000000)
# Sys.sleep(5)
try(remDr$executeScript("my_interval = window.setInterval(function() {window.scrollBy(0, 300);}, 100);return;", args = list()))
# Sys.sleep(5)
cat('a')
NamewebElems <- remDr$findElements(using = 'css selector', ".detail h3 a")
try(remDr$executeScript("clearInterval(my_interval);", args = list()))
}
您可以使用catch
以更合适的方式捕获错误。显然,最好的解决方案是防止这种错误,但如果您的目标只是使脚本正常工作,那么这个答案可能会对您有所帮助。
相关文章:
- 数组在递归方法中设置为null
- Kendo:我该如何在树视图中创建一个递归的hieiarchy
- 递归使用 eval() 是检查程序执行的好方法吗?
- 使用递归、Ramda.js和无点样式重构字符串的getPermutations()
- 递归深度比较
- Eloquent JavaScript递归示例如何终止为返回1,但仍然输出指数值
- 递归函数中断
- 如何递归地获取嵌套对象中所有子对象的列表
- JavaScript 素数搜索无限递归
- 在递归生成器函数中,yield后面的*(星号/星号)语法意味着什么
- 递归|两个函数名
- 有没有一种方法可以在Javascript中进行可变递归currying
- 如何对不同的表递归使用以下代码
- 给定一个带有数字的数组,我如何编写一个递归函数,当 2 个元素加起来为一个目标时,它会在数组中查找索引
- 如何递归地移除多个子节点而不弄乱索引
- Javascript:如何根据即将到来的索引值递归地分组数组
- 在级别3 - Rselenium上递归索引失败
- 通过索引(递归)从嵌套数组中删除项
- Javascript承诺递归返回索引
- Javascript递归对象无序列表为父对象保留相同的索引