2017-07-20 2 views
1

J'utilise RSelenium pour faire défiler automatiquement un site Web de médias sociaux et enregistrer des messages. Parfois, j'arrive au bas de la page Web et aucun autre poste ne peut être chargé car il n'y a plus de données disponibles. Je veux juste être en mesure de vérifier si c'est le cas, donc je peux arrêter d'essayer de faire défiler.Vérifiez s'il est possible de faire défiler vers le bas avec RSelenium

Comment puis-je savoir s'il est possible de continuer le défilement dans RSelenium? Le code ci-dessous illustre ce que j'essaie de faire - je pense que j'ai juste besoin d'aide avec l'instruction "if".

Pour votre information, il y a une solution pour le faire en Python here (vérification essentiellement si la hauteur de la page change entre les itérations), mais je ne peux pas comprendre comment le mettre en œuvre (ou toute autre solution) dans R.

# Open webpage 
library(RSelenium) 
rD = rsDriver(browser = "firefox") 
remDr = rD[["client"]] 
url = "https://stocktwits.com/symbol/NZDCHF" 
remDr$navigate(url) 

# Keep scrolling down page, loading new content each time. 
ptm = proc.time() 
repeat { 
    remDr$executeScript("window.scrollTo(0,document.body.scrollHeight);") 
    Sys.sleep(3) #delay by 3sec to give chance to load. 

    # Here's where i need help 
    if([INSERT CONDITION TO CHECK IF SCROLL DOWN IS POSSIBLE]) { 
    break 
    } 
} 

Répondre

2

A trébuché sur un moyen de le faire dans Python here et modifié pour travailler dans R. Ci-dessous une mise à jour du code original que j'ai posté ci-dessus.

# Open webpage 
library(RSelenium) 
rD = rsDriver(browser = "firefox") 
remDr = rD[["client"]] 
url = "https://stocktwits.com/symbol/NZDCHF" 
remDr$navigate(url) 

# Keep scrolling down page, loading new content each time. 
last_height = 0 # 
repeat { 
    remDr$executeScript("window.scrollTo(0,document.body.scrollHeight);") 
    Sys.sleep(3) #delay by 3sec to give chance to load. 

    # Updated if statement which breaks if we can't scroll further 
    new_height = remDr$executeScript("return document.body.scrollHeight") 
    if(unlist(last_height) == unlist(new_height)) { 
    break 
    } else { 
    last_height = new_height 
    } 
}