2016-08-19 7 views
3

내 Linux 컴퓨터에서 RSelenium과 Tor를 사용하여 Tor IP (Tor Firefox와 함께 Firefox)를 반환하려고합니다. 이것은 파이썬과 함께 할 수 있지만 R에서 문제가 있습니다. 누구나이 작업을 할 수 있습니까? 아마도 Windows/Linux에서 솔루션을 공유 할 수 있습니다.Linux/Windows에서 RSelenium을 사용하는 Tor 브라우저

# 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() 

오류 Error in callSuper(...) : object 'binaryExtention' not found가 반환되고있다.

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 
+0

[이 링크] (http://stackoverflow.com/questions/38799909/rselenium-doesnt-connect)에서'javaargs'는'startServer'에 바이너리를 설정해야합니다. 그러나 이렇게하면 Firefox (비 Tor 브라우저) 만 열립니다. 그런 다음'driver.version : unknown' 오류를 발생시킵니다. –

답변

4

다음과 같은 뭔가가 작동합니다 : 커뮤니티 참고로

이 셀레늄 코드는 Python3를 사용하여 Windows에서 작동

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

UPDATE :

이 창에 나를 위해 일한 . 먼저 베타 버전을 실행하십시오.

다음으로 Tor 브라우저의 버전을 수동으로여십시오.

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." 
+0

그러면 Firefox (비 Tor) 브라우저가 열리 며 긴 '서버 측 오류'가 발생합니다 –

+0

경로로 지정된 브라우저가 열립니다. 파이썬 예제를 보면 파이어 폭 토르 프로파일을 제공해야합니다. – jdharrison

+0

R에서 어떻게 그럴 수 있습니까? 그것들은 나를 잊어 버린다 ... –

3

이것은 MacOS Sierra에서 작동합니다.

먼저 Firefox 및 Tor 브라우저 수동 프록시를 구성해야합니다. 귀하의 환경 설정에

이동> 고급> 네트워크> 설정

설정 SOCKS 호스트 : 127.0.0.1 포트 : 9150 체크 -> 브라우저 메뉴 표시 줄에서 SOCKS v5에서합니다.

당신은 또한 당신은 또한이 필요합니다 "프록시 서버가 연결을 거부하고"그렇지 않으면 당신은 파이어 폭스 브라우저에서 메시지를 받게됩니다 .... Rstudio에서 R 스크립트를 실행하는 동안 열린 토르 브라우저를 가지고

가 필요합니다 스크립트 프로필 이름

열기 찾기에 파이어 폭스 프로필의 이름을 복사/사용자/이름/라이브러리/Application Support/파이어 폭스/정보/프로파일 이름에 도착하는

이 메시지 "축하와 파이어 폭스 브라우저의 인스턴스를 엽니 다

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

내 R 테스트 스크립트. 이 브라우저는 Tor를 사용하도록 구성되었습니다. "

1

경고 : 광범위하게 테스트하지는 않았지만 제대로 작동하는 것 같습니다.

@ Ashley72에서 몇 가지 아이디어에 의존하지만 수동 설정 및 복사 방지 (Rselenium에서뿐만 아니라 지금 소멸 기능을 @jdharrison에서 솔루션에 필요한) 및 https://indranilgayen.wordpress.com/2016/10/24/make-rselenium-work-with-r/에서 몇 가지 아이디어는 다음과 같은 프로필 옵션을 조정 (I 일반적으로 수를 조정 다른 옵션의,하지만 그들은) 질문에 대한 관련하지 않는 것 다음 마리오네트 선택하는

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 

보시다시피, 내가 만든되지 않은 변경 사항 :

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

그런 다음 당신은 평소와 같이 서버를 시작 이온. 나는 그 의미가 무엇인지 전혀 모른다. 의견을 부탁합니다.

편집 : Tor 브라우저가 실행 중이어야합니다. 그렇지 않으면 Rselenium에서 연 브라우저가 "프록시 서버 연결 거부"오류를 표시합니다.