我正在尝试使用Linux机器上的本地代理(Tor(将RSelenium与Firefox一起使用。
我在这个 tuto 之后安装 Tor 没有问题,命令行wget -qO - https://api.ipify.org; echo
确实为我提供了一个新 IP。
现在我愿意使用带有 RSelenium 的 Firefox 通过端口 9050 上的 Tor 本地主机:
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 127.0.0.1:9050 *:*
LISTEN 0 128 127.0.0.1:9051 *:*
我使用一个独立的Selenium java(Selenium-server-standalone-2.53.0.jar(,它可以与常规RSelenium一起使用:这是一个在ipChicken上显示IP的示例
library(RSelenium)
remDr <- remoteDriver(
remoteServerAddr = "localhost",
port = 4444L,
browserName = "firefox"
)
remDr$open()
remDr$navigate("https://ipchicken.com/")
ip <- remDr$findElements(using = "css", value ='b')
print(ip[[1]]$getElementText())
我确实得到了我的IP。现在我想看到它发生在 Tor 上。因此,我尝试在将远程驱动程序与火狐连接时添加代理选项:
eCaps <- list("moz:firefoxOptions" = list(
args = c('--proxy-server=localhost:9050'
)))
remDr <- remoteDriver(
remoteServerAddr = "localhost",
port = 4444L,
browserName = "firefox",
extraCapabilities = eCaps
)
我尝试了'--proxy-server=localhost:9050'
、'--proxy-server=http://localhost:9050'
、'--proxy-server=socks5://localhost:9050'
、'--proxy-server=127.0.0.1:9050'
,它没有输出任何错误,并给了我最初的IP。所以它不起作用。独立人士表示它确实使用以下选项执行:例如
22:59:10.288 INFO - Executing: [new session: Capabilities [{nativeEvents=true, browserName=firefox, javascriptEnabled=true, moz:firefoxOptions={args=--proxy-server= 127.0.0.1:9050}, version=, platform=ANY}]])
22:59:10.297 INFO - Creating a new session for Capabilities [{nativeEvents=true, browserName=firefox, javascriptEnabled=true, moz:firefoxOptions={args=--proxy-server= 127.0.0.1:9050}, version=, platform=ANY}]
22:59:30.323 INFO - Done: [new session: Capabilities [{nativeEvents=true, browserName=firefox, javascriptEnabled=true, moz:firefoxOptions={args=--proxy-server= 127.0.0.1:9050}, version=, platform=ANY}]]
我做错了什么?
编辑
在user1207289的回答之后,在意识到您可以直接在RSelenium
中创建Firefox配置文件后,我尝试了:
eCaps <- makeFirefoxProfile(list(network.proxy.type = 1,
network.proxy.socks = "127.0.0.1",
network.proxy.socks_port = 9050,
network.proxy.socks_version = 5))
remDr <- remoteDriver(
remoteServerAddr = "localhost",
port = 4444L,
browserName = "firefox",
extraCapabilities = eCaps
)
由于这个问题,我使用整数表示network.proxy.socks_port
,network.proxy.socks_port
和network.proxy.type
,但也尝试使用字符,但没有任何成功。我尝试了有和没有network.proxy.socks_version = 5
,但它没有用(我正在获得正常的ip(。我试过network.proxy.socks_port = 9150
,但没有用。
我也试过
eCaps <- list("moz:firefoxOptions" = list(
args = c('network.proxy.socks=127.0.0.1:9050' ,'network.proxy.type=1' )
)
)
但这也没有用。
我可以使用网络驱动程序和火狐连接到 TOR,如下所示。只需确保 TOR 已安装并正在运行即可。我在Mac(卡塔琳娜(上使用了它。您可以根据您的 操作系统 ,以防它们不同。
它是在 c# 中,但您几乎可以为任何绑定执行此操作
FirefoxOptions firefoxOptions = new FirefoxOptions();
firefoxOptions.SetPreference("network.proxy.type", 1);
firefoxOptions.SetPreference("network.proxy.socks", "127.0.0.1");
firefoxOptions.SetPreference("network.proxy.socks_port", 9150);
FirefoxDriverService service = FirefoxDriverService.CreateDefaultService();
IWebDriver driver = new FirefoxDriver(service, firefoxOptions);
当这打开一个 firefox 浏览器实例时,只需访问同一实例上的 https://check.torproject.org/即可检查它是否连接到 TOR。这将确认您已连接,并将显示您的新IP
经过大量搜索,我找到了一种方法:RSelenium
具有getFirefoxProfile
功能,可以获取Firefox配置文件。
所以我首先直接从 firefox 配置配置文件,遵循相同的 tuto,并将其复制到我的 R 文件夹中。用
fprof <- getFirefoxProfile("myprofile.default")
remDr <- remoteDriver(
remoteServerAddr = "localhost",
port = 4444L,
browserName = "firefox",
extraCapabilities = fprof
)
确实工作了。