将Selenium绑定到特定IP地址 - 可能吗?

18

像许多人一样,我们通过以下命令启动Selenium服务器:

java -jar selenium-server-standalone-2.21.0.jar
我们发现这样会在0.0.0.0:4444上开启Selenium。
Started SocketListener on 0.0.0.0:4444

[USER @ BOX ~]# netstat -na | grep LISTEN | grep 4444
tcp        0      0 :::4444                     :::*                        LISTEN

有没有办法将selenium绑定到特定的IP地址(localhost)?

谢谢。


请标记一个带有“-host 192.168.1.100”的答案,它现在在selenium >= 2.40.0中可用。 - Leo Gallucci
5个回答

9
请使用以下命令。
    java -jar selenium-server-standalone-2.21.0.jar -host 192.168.1.100

其中 192.168.1.100 是主机的 IP 地址。


这不起作用。无论如何,Selenium都会在0.0.0.0:4444上启动。 - anonymous-one
1
这对我有效。命令行输出仍然显示“连接到'127.0.0.1:4444'”,但看起来我能够使用主机参数(在我的情况下是'10.0.0.179')进行连接。 - Aidan Ewen
Retornam,测试这是否有效的方法不是访问命令行指定的IP,而是访问系统的所有其他 IP地址,以查看它们工作。当我指定“-host 127.0.0.1”时,我仍然可以使用服务器的外部IP地址从另一台计算机连接到服务器,这是不应该发生的。 - Rob Kennedy
@RobKennedy 自从我大约一年前回答这个问题以来,情况已经发生了变化。 - retornam
1
顺便说一句:我正在尝试使用Selenium网格模式,并在节点上使用“-host”设置会影响报告给中心的节点的IP地址,这是解决我遇到的问题的方法,即中心无法连接回默认情况下使用我的网络配置提供的不可路由私有地址的节点。 - rakslice
实际上,如果您检查java -jar selenium-server-standalone-2.39.0.jar -h命令,您可以看到Selenium RC服务器的帮助菜单,您会意识到在selenium server RC命令列表中没有-host命令。 - erhun

5

这并不是正确处理此问题的方法,但这是一种方法。

所以这样做只会从任何外部来源丢弃端口4444上的任何连接。您可以通过首先进入页面来测试这一点。

像这样启动服务器。

java -jar selenium-server-standalone-2.39.0.jar -host 127.0.0.1 -port 4444 

确认一切正常工作

http://yourexternalip:4444/wd/hub/

如果您的服务器正常运行,页面将会加载。

发送命令。

sudo iptables -A INPUT -p tcp --dport 4444 -s 127.0.0.1 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 4444 -j DROP

然后重新加载页面。该网页将不再可访问(因为您正在使用外部IP访问)。

您的新可访问的URL为

http://127.0.0.1:4444/wd/hub/

应该是可以工作的

再次强调,这只是对一个更大问题的权宜之计,这样做不会强制你更改任何源代码,同时仍保持系统的安全性。


2

1
嘿@Steltek,你知道修复程序是否包含在selenium 2.40.0中吗?http://selenium-release.storage.googleapis.com/index.html?path=2.40/ - Leo Gallucci

1
我也遇到了与Hub相关的同样问题。当我尝试启动Hub时,它指向了另一个IP地址,但是当我检查本地系统的IP地址时,发现它是不同的。为了解决这个问题,我只是尝试了以下代码,它有效果。
java -jar selenium-server-standalone-3.12.0.jar -host 192.XXX.X.XX -role hub

我的中心设备已注册到本地机器的IP地址。

0

您可以在远程机器上运行java -jar selenium-server-standalone-2.21.0.jar

然后在您的Selenium脚本中定义您的WebDriver以远程运行。

在Ruby中,您可以这样做

@driver = Selenium::WebDriver.for(:remote, :url => "http://specific_ip_of_remotemachine:4444", :desired_capabilities => firefox)

这是你要找的吗?


不,这不是我们想要的。我们想将Selenium监听器(默认端口4444)绑定到特定的IP地址,而不是服务器上的所有IP地址。 - anonymous-one

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接