【问题标题】:How to Allocate a Private IP address and Port with Ghostdriver如何使用 Ghostdriver 分配私有 IP 地址和端口
【发布时间】:2015-04-11 00:32:59
【问题描述】:

我编写了一个 Ghostdriver Maven Java 项目,我在 Ubuntu 14.04 64 位中使用 shell 脚本调用了 jar 文件的许多实例。

我的 shell 脚本中的每一行都会调用我的 jar 文件的一个新实例。

每一行的格式:

screen -dmS name java -jar /path/name.jar arg1 arg2 arg3

目前我有 1 个网络接口 (eth0) 分成多个网络别名(eth0:1、eth0:2 等),每个别名指向一个私有 IP,而该私有 IP 又指向一个公共 IP。

我正在尝试找到为我的 java 程序的每个实例分配私有 IP 和可能的端口号的最佳方法。目前我在我的程序中调用 Ghostdriver。

我在程序中调用 ghost driver 的方式:

public class className {

    PhantomJSDriver driver;
    public static final File PHANTOMJS_EXE = new     File("//home/username/phantomjs/bin/phantomjs");


    public className() {
        callGhostdriver();
        driver.quit();
    }

 private void callGhostdriver() {
        {
            DesiredCapabilities caps = new DesiredCapabilities();
            caps.setJavascriptEnabled(true);
            caps.setCapability("phantomjs.binary.path",
                    PHANTOMJS_EXE.getAbsolutePath());

            driver = new PhantomJSDriver(caps);
            driver.manage().window().maximize();
            actions = new Actions(driver);
        }
    }
}

任何帮助将不胜感激。

***更新****

我尝试更改 callGhostdriver 方法但没有成功。

private void callGhostdriver() {
DesiredCapabilities dcaps = new DesiredCapabilities();
dcaps.setCapability(
        PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY,
        PHANTOMJS_EXE.getAbsolutePath());
String[] phantomJsArgs = {"--webdriver=172.16.190.131:6781"};
dcaps.setCapability(
        PhantomJSDriverService.PHANTOMJS_CLI_ARGS,
        phantomJsArgs);
driver = new PhantomJSDriver(dcaps);
driver.manage().window().maximize();
actions = new Actions(driver);
}

参数 --webdriver=IP:PORT 似乎被默认覆盖 --webdriver 调用。

运行 jar 的输出:

*2015 年 4 月 12 日下午 5:26:25 org.openqa.selenium.phantomjs.PhantomJSDriverService 信息:端口:8651 2015 年 4 月 12 日下午 5:26:25 org.openqa.selenium.phantomjs.PhantomJSDriverService 信息:参数: [--webdriver=172.16.190.131:6781,--webdriver=8651, --webdriver-logfile=/home/RemovedPath/phantomjsdriver.log] 2015 年 4 月 12 日下午 5:26:25 org.openqa.selenium.phantomjs.PhantomJSDriverService 信息:环境:{} [INFO - 2015-04-12T21:26:26.584Z] GhostDriver - Main - 在端口 8651 上运行

它应该使用具有不同私有 IP 的端口 6781,但它使用的是 8651。

【问题讨论】:

  • 我可以设置所有功能,但是 --webdriver=port,好像你无法更改它,或者它是一个错误?
  • 我至少可以更改它使用的端口吗?这样我就可以使用 iptables 来管理流量。目前它只是随机选择一个端口。

标签: ip ubuntu-14.04 ghostdriver


【解决方案1】:

我找到了一种设置端口的黑客方法,但还没有弄清楚如何设置私有 ip,我可能不得不使用 iptables 来路由流量。

private void loadLightWeightDriverCustom() {
    ArrayList<String> cliArgsCap = new ArrayList();
    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, PHANTOMJS_EXE.getAbsolutePath());
    cliArgsCap.add("--web-security=false");
    cliArgsCap.add("--ssl-protocol=any");
    cliArgsCap.add("--ignore-ssl-errors=true");
    capabilities.setCapability(
            PhantomJSDriverService.PHANTOMJS_CLI_ARGS, cliArgsCap);
    driver = new PhantomJSDriver(Configure(cliArgsCap), capabilities);
}

private PhantomJSDriverService Configure(ArrayList<String> cap) {
    return new PhantomJSDriverService.Builder().usingPhantomJSExecutable(PHANTOMJS_EXE)
            .usingPort(5555)
            .usingCommandLineArguments(
                    (cap.toArray(new String[cap.size()])))
            .build();
}

【讨论】:

  • HALP,必须有更好的方法来做到这一点。
【解决方案2】:

试试这个 --> List<String> cliArgsCap = Arrays.asList( "--webdriver=172.16.190.131:6781"); dcaps.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, cliArgsCap);

【讨论】:

  • 不幸的是,这不起作用,它给了我之前发布的相同输出“信息:参数:[--webdriver=172.16.190.131:6781,--webdriver=3205,--webdriver- logfile=/home/RemovedPath/phantomjsdriver.log] Apr 12, 2015 5:26:25 PM " [INFO - 2015-04-13T22:05:13.944Z] GhostDriver - Main - 在端口 3205 上运行,所以它看起来像是覆盖我用另一个 webdriver 参数为 webdriver 输入的内容。
【解决方案3】:

我能够找到 --webdriver 命令的修复程序,https://github.com/detro/ghostdriver/pull/438,我编译了那个 jar 并将其加载。现在我得到了

Apr 24, 2015 10:35:04 AM org.openqa.selenium.phantomjs.PhantomJSDriverService 
INFO: executable: C:*Removed Path\phantomjs-2.0.0-windows\bin\phantomjs.exe
Apr 24, 2015 10:35:04 AM org.openqa.selenium.phantomjs.PhantomJSDriverService 
INFO: port: 41533
Apr 24, 2015 10:35:04 AM org.openqa.selenium.phantomjs.PhantomJSDriverService 
INFO: arguments: [--webdriver=127.0.0.1:6666, --webdriver-logfile=C:\Removed Path*\phantomjsdriver.log]
Apr 24, 2015 10:35:04 AM org.openqa.selenium.phantomjs.PhantomJSDriverService 
INFO: environment: {}
[INFO - 2015-04-24T14:35:06.222Z] GhostDriver - Main - running on port 6666
Exception in thread "main" org.openqa.selenium.remote.UnreachableBrowserException: Could not start a new session. Possible causes are invalid address of the remote server or browser start-up failure.
Build info: version: '2.45.0', revision: '5017cb8e7ca8e37638dc3091b2440b90a1d8686f', time: '2015-02-27 09:10:26'
System info: host: 'MBC5708', ip: '167.74.185.13', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.7.0_45'
Driver info: driver.version: PhantomJSDriver
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:593)
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:240)
at org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:126)
at org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:139)

我调用 phantomjs 的方法是:

  ArrayList<String> cliArgsCap = new ArrayList<String>();
    DesiredCapabilities capabilities = DesiredCapabilities.phantomjs();
    cliArgsCap.add("--webdriver=6666");
    capabilities.setCapability(
    PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY,PHANTOMJS_EXE.getAbsolutePath());
    capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, cliArgsCap);
    driver = new PhantomJSDriver(capabilities);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-11
    • 2014-03-14
    • 2016-03-16
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 2021-11-11
    • 2017-06-14
    相关资源
    最近更新 更多