2016-10-21 6 views
2

私はRSeleniumを使用しています。以下のコードはJavascriptのコマンドラインです。私はループでそれを使用し、最初の繰り返しの間にうまく動作します。しかし、私は2番目の反復の間に問題があります。ここでレベル3で再帰索引作成に失敗しました - Rselenium

は、私が持っているコードは次のとおりです。

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 = '[email protected]';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") 

、問題はなくなり、繰り返しは正しく機能します。しかし問題は、私はこの行が必要であり、2番目のループでは、エラーポップアップとスクリプトが停止することです。

+0

返す 'remDr $ executeScript(" window.scrollBy(0、300);}、100); return; "、args = list())' – jdharrison

+0

@jdharrison残念なことにそれはそれを解決しませんでした。私はまだエラーが発生し、スクリプトを停止します –

+1

あなたが持っている問題を示す再現可能な例を提供してください。 – jdharrison

答えて

0

私は明らかにベストではないソリューションを見つけましたが、テストして動作します。 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 = '[email protected]';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を使用することができます。明らかに、このエラーを防ぐのが最善の解決策ですが、この答えは、あなたの目標がスクリプトを動作させるだけのものであれば役に立ちます。

関連する問題