将 selenium 绑定到特定 IP - 可能吗?

Posted

技术标签:

【中文标题】将 selenium 绑定到特定 IP - 可能吗?【英文标题】:Bind selenium to a specific IP - Possible? 【发布时间】:2012-05-23 09:10: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 【参考方案1】:

使用以下命令

    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 启动。 这对我有用。命令行输出仍然显示 'connect on '127.0.0.1:4444' 但看起来我可以使用主机参数进行连接(在我的情况下为 '10.0.0.179')。 Retornam,这个是否有效的测试不是访问命令行指定的IP,而是访问系统所有的其他个IP地址,看他们不要工作。当我指定-host 127.0.0.1 时,我仍然可以使用服务器的外部 IP 地址从另一台计算机连接到服务器,这是不应该发生的。 @RobKennedy 自从我一年前回答这个问题以来,情况发生了变化。 旁白:我正在尝试使用 selenium 网格模式,并且在节点上使用 -host 设置确实会影响报告给集线器的节点的 IP 地址,这是解决问题的一种方法我的集线器无法通过我的网络配置默认提供的不可路由私有地址连接回节点。【参考方案2】:

这不是处理这个问题的正确方法,而是一种方法

因此,这将只是从任何外部源断开端口 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/

应该可以工作

同样,这更像是解决更大问题的创可贴,这样做不会强迫您更改任何源代码并仍然保持系统安全

【讨论】:

【参考方案3】:

这可以通过添加“-host 192.168.1.100”参数来实现,前提是您的版本中有此修复:

https://code.google.com/p/selenium/source/detail?r=71c5e231f442

(在撰写本文时,可用的二进制文件中不包含该修复程序,因此您必须从源代码构建自己的。)

【讨论】:

嘿@Steltek,你知道修复是否包含在 selenium 2.40.0 中吗? selenium-release.storage.googleapis.com/index.html?path=2.40【参考方案4】:

你可以在远程机器上运行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。【参考方案5】:

我在使用 Hub 时也遇到了同样的问题。因此,当我尝试启动集线器时,我的集线器指向其他 IP 地址,但是当我检查我的 IP 地址时,它在我的本地系统上有所不同。为了克服这个问题,我刚刚尝试了以下代码,它可以工作。

java -jar selenium-server-standalone-3.12.0.jar -host 192.XXX.X.XX -role hub

并且我的集线器已注册到我的本地计算机 IP 地址。

【讨论】:

以上是关于将 selenium 绑定到特定 IP - 可能吗?的主要内容,如果未能解决你的问题,请参考以下文章

UDP打孔可能吗?

如何将 TAO 事件通道绑定到特定的命名服务

在发送传出请求之前将新的 SoapClient 绑定到特定的 IP 地址

Python - 通过特定的IP地址路由selenium浏览器

滚动到特定元素 Selenium WebDriver Java

在特定 IP 地址 ERLANG 上绑定 UDP 服务器