Navegador Tor con RSelenium en Linux / Windows

Buscando usar RSelenium y Tor usando mi máquina Linux para devolver el Tor IP (con Firefox como navegador Tor). Esto es factible con Python, pero tener problemas con él en R. ¿Alguien puede hacer que esto funcione? Quizás pueda compartir su solución en Windows / Linux.

# library(devtools) # devtools::install_github("ropensci/RSelenium") library(RSelenium) RSelenium::checkForServer() RSelenium::startServer() binaryExtension <- paste0(Sys.getenv('HOME'),"/Desktop/tor-browser_en-US/Browser/firefox") remDr <- remoteDriver(dir = binaryExtention) remDr$open() remDr$navigate("http://myexternalip.com/raw") remDr$quit() 

Se está Error in callSuper(...) : object 'binaryExtention' not found error Error in callSuper(...) : object 'binaryExtention' not found .

Para referencia de la comunidad, este código de Selenium funciona en Windows usando Python3:

 from bs4 import BeautifulSoup from selenium import webdriver from selenium.webdriver.firefox.firefox_profile import FirefoxProfile from selenium.webdriver.firefox.firefox_binary import FirefoxBinary from os.path import expanduser # Finds user's user name on Windows # Substring inserted to overcome r requirement in FirefoxBinary binary = FirefoxBinary(r"%s\\Desktop\\Tor Browser\\Browser\\firefox.exe" % (expanduser("~"))) profile = FirefoxProfile(r"%s\\Desktop\\Tor Browser\\Browser\\TorBrowser\\Data\\Browser\\profile.default" % (expanduser("~"))) driver = webdriver.Firefox(profile, binary) driver.get('http://myexternalip.com/raw') html = driver.page_source soup = BeautifulSoup(html, "lxml") # lxml needed # driver.close() # line.strip('\n') "Current Tor IP: " + soup.text.strip('\n') # Based in part on # http://stackoverflow.com/questions/13960326/how-can-i-parse-a-website-using-selenium-and-beautifulsoup-in-python # http://stackoverflow.com/questions/34316878/python-selenium-binding-with-tor-browser # http://stackoverflow.com/questions/3367288/insert-variable-values-into-a-string-in-python 

Algo como lo siguiente debería funcionar:

 browserP <- paste0(Sys.getenv('HOME'),"/Desktop/tor-browser_en-US/Browser/firefox") jArg <- paste0("-Dwebdriver.firefox.bin='", browserP, "'") selServ <- RSelenium::startServer(javaargs = jArg) 

ACTUALIZAR:

Esto funcionó para mí en las ventanas. En primer lugar ejecuta la versión beta:

 checkForServer(update = TRUE, beta = TRUE, rename = FALSE) 

A continuación, abra una versión del navegador tor manualmente.

 library(RSelenium) browserP <- "C:/Users/john/Desktop/Tor Browser/Browser/firefox.exe" jArg <- paste0("-Dwebdriver.firefox.bin=\"", browserP, "\"") pLoc <- "C:/Users/john/Desktop/Tor Browser/Browser/TorBrowser/Data/Browser/profile.meek-http-helper/" jArg <- c(jArg, paste0("-Dwebdriver.firefox.profile=\"", pLoc, "\"")) selServ <- RSelenium::startServer(javaargs = jArg) remDr <- remoteDriver(extraCapabilities = list(marionette = TRUE)) remDr$open() remDr$navigate("https://check.torproject.org/") > remDr$getTitle() [[1]] [1] "Congratulations. This browser is configured to use Tor." 

Esto funciona en MacOS Sierra.

Primero necesita configurar el Proxy manual de los navegadores Firefox y Tor.

Vaya a sus Preferencias> Avanzadas> Red> Configuración

Configure SOCKS Host: 127.0.0.1 Puerto: 9150 Marque -> en SOCKS v5 en la barra de menú del navegador.

También deberá tener abierto el Navegador Tor mientras se ejecuta el script R en Rstudio … de lo contrario, aparecerá un mensaje en el navegador Firefox “El servidor proxy está rechazando las conexiones”

También deberá copiar el nombre de su perfil de Firefox en el script nombre-perfil

Abra el Finder y acceda a / Usuarios / nombre de usuario / Biblioteca / Soporte de aplicaciones / Firefox / Perfiles / nombre de perfil

Mi script de prueba R

  require(RSelenium) fprof <- getFirefoxProfile("/Users/**username**/Library/Application\ Support/Firefox/Profiles/nfqudbv2.default-1484451212373",useBase=TRUE) remDrv <- remoteDriver( browserName = "firefox" , extraCapabilities = fprof) remDrv$open() remDrv$navigate("https://check.torproject.org/") 

Esto abrirá una instancia del navegador Firefox con el mensaje "Enhorabuena. Este navegador está configurado para usar Tor".

Advertencia: no he probado mucho, pero parece funcionar.

Confiando en algunas ideas de @ Ashley72 pero evitando configuraciones manuales y copiando (así como también las funciones obsoletas de Rselenium necesarias para la solución de @jdharrison) y algunas ideas de https://indranilgayen.wordpress.com/2016/10/24/ make-rselenium-work-with-r / ajusta las siguientes opciones de perfil (por lo general, ajuste otras opciones, pero no parecen relevantes para la pregunta):

 fprof <- makeFirefoxProfile(list(network.proxy.socks = "127.0.0.1", # for proxy settings specify the proxy host IP network.proxy.socks_port = 9150L, # proxy port. Last character "L" for specifying integer is very important and if not specified it will not have any impact network.proxy.type = 1L, # 1 for manual and 2 for automatic configuration script. here also "L" is important network.proxy.socks_version=5L, #ditto network.proxy.socks_remote_dns=TRUE)) 

A continuación, inicia el servidor como de costumbre:

 rD <- rsDriver(port = 4445L, browser = "firefox", version = "latest", geckover = "latest", iedrver = NULL, phantomver = "2.1.1", verbose = TRUE, check = TRUE, extraCapabilities = fprof) # works for selenium server: 3.3.1 and geckover: 0.15.0; Firefox: 52 remDr <- rD[["client"]] remDr <- rD$client remDr$navigate("https://check.torproject.org/") # should confirm tor is setup remDr$navigate("http://whatismyip.org/") # should confirm tor is setup 

Como ves, no he hecho cambios en la opción de marioneta. No tengo idea de cuáles podrían ser las implicaciones. Por favor comenta.

EDITAR: el navegador Tor tiene que estar en funcionamiento, parece. De lo contrario, el navegador abierto por Rselenium da un error "servidor proxy que rechaza la conexión".