【问题标题】:Recursive indexing failed at level 3 - Rselenium递归索引在级别 3 失败 - Rselenium
【发布时间】:2016-10-21 21:03:19
【问题描述】:

我使用 RSelenium。以下代码是 Javascript commnad。我在一个循环中使用它,它在第一次迭代期间运行良好。但是我在第二次迭代时遇到了问题。

这是我的代码:

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")

,问题消失了,迭代工作正常。但问题是我需要这一行,在第二个循环中,错误弹出和脚本停止。

【问题讨论】:

  • 尝试添加退货remDr$executeScript("window.setInterval(function() {window.scrollBy(0, 300);}, 100); return;", args = list())
  • @jdharrison 不幸的是,这并没有解决它。我仍然收到错误,它会停止脚本
  • 请提供一个可重现的示例来说明您遇到的问题。
  • @jdharrison 请查看我刚刚添加的可重现示例
  • 试用开发版devtools::install_github("ropensci/RSelenium") 已修复返回多个网页元素的问题。

标签: javascript r rselenium


【解决方案1】:

我找到了一个显然不是最好的解决方案,但我测试了它并且它有效。每次注入 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 以更正确的方式捕获错误。显然,最好的解决方案是防止此错误,但如果您的目标只是让您的脚本正常工作,此答案可能会对您有所帮助。

【讨论】:

    猜你喜欢
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 2022-11-08
    • 1970-01-01
    相关资源
    最近更新 更多