Skip to content

Instantly share code, notes, and snippets.

@bastianolea
Created December 16, 2025 14:18
Show Gist options
  • Select an option

  • Save bastianolea/0eb150d5e841fa507e9c80e03482f1a5 to your computer and use it in GitHub Desktop.

Select an option

Save bastianolea/0eb150d5e841fa507e9c80e03482f1a5 to your computer and use it in GitHub Desktop.
Script para manejar un navegador con R y hacer que se desplace por una página
# script para manejar un navegador con R y hacer que se desplace por una página
library(RSelenium)
# crear driver para controlar navegador
driver <- rsDriver(browser = "firefox",
port = 4560L, verbose = F,
chromever = NULL, phantomver = NULL)
remote <- driver$client
# navegar al sitio
remote$navigate(url = "https://bastianolea.github.io/aprende_r/")
# pruebas ----
# scroll normal
remote$executeScript("window.scrollBy(0, 300);")
# scroll suave
remote$executeScript("window.scrollBy({
top: 300, left: 0,
behavior: 'smooth'});")
# scroll a elemento
remote$executeScript("document.querySelector('#obtener-r').scrollIntoView({behavior: 'smooth'});")
# scroll a elemento con pixeles extra
remote$executeScript("
const element = document.querySelector('#obtener-r');
const y = element.getBoundingClientRect().top + window.scrollY - 90;
window.scrollTo({ top: y, behavior: 'smooth' });")
# funciones ----
# scroll hasta el elemento + offset
scrollear_elemento <- function(elemento = "#introduccion",
scroll = 90) {
remote$executeScript(paste("
const element = document.querySelector('", elemento, "');
const y = element.getBoundingClientRect().top + window.scrollY - ", scroll, ";
window.scrollTo({ top: y, behavior: 'smooth' });")
)
}
# scroll por pixeles exactos
scrollear_manual <- function(scroll = 90) {
remote$executeScript(paste("
window.scrollBy({
top:", scroll, ", left: 0,
behavior: 'smooth' });"))
}
# función de espera entre scrolls
espera <- function(largo = "larga") {
if (largo == "larga") {
Sys.sleep(1.1)
} else if (largo == "corta") {
Sys.sleep(0.7)
}
}
# controlar la página ----
scrollear_elemento("#introduccion")
espera()
scrollear_elemento("#obtener-r")
espera()
scrollear_manual(400)
espera()
scrollear_elemento("#basico")
espera()
scrollear_manual(400); espera("corta")
scrollear_manual(260); espera("corta")
scrollear_manual(260); espera("corta")
scrollear_manual(260); espera("corta")
scrollear_elemento("#trabajando-con-datos-en-r")
espera()
scrollear_manual(300); espera("corta")
scrollear_manual(280); espera("corta")
scrollear_manual(300); espera("corta")
scrollear_manual(340); espera("corta")
scrollear_elemento("#programación-básica-con-r")
espera()
scrollear_elemento("#visualización-de-datos-con-r")
espera()
scrollear_elemento("#intermedio")
espera()
scrollear_elemento("#ayudas-para-aprender-r")
espera()
scrollear_elemento("#apuntes")
espera()
scrollear_elemento("#libros-recomendados")
espera()
scrollear_elemento("#cursos")
espera()
scrollear_manual(420); espera("corta")
scrollear_manual(310); espera("corta")
scrollear_manual(300); espera("corta")
scrollear_elemento("#avanzado")
espera()
scrollear_manual(360)
espera()
scrollear_elemento("#libros-avanzados")
espera()
scrollear_manual(300); espera("corta")
espera()
scrollear_elemento("#manténte-al-día")
espera()
scrollear_elemento("#atrévete")
espera()
# volver arriba
scrollear_elemento("body")
# resultado: https://www.linkedin.com/posts/bastianolea_rstats-activity-7406413109680140289-WKpv?utm_source=share&utm_medium=member_desktop&rcm=ACoAAB9if5MBe0keh4VrsmJOFbZxmIK9T9GSkYM
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment