Как выделить частный IP-адрес и порт с помощью Ghostdriver

Я написал проект Ghostdriver Maven Java, в котором я вызываю множество экземпляров файла jar с помощью сценария оболочки в Ubuntu 14.04 64bit.

Каждая строка в моем сценарии оболочки вызывает новый экземпляр моего файла jar.

Формат каждой строки:

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

В настоящее время у меня есть 1 сетевой интерфейс (eth0), разделенный на несколько сетевых псевдонимов (eth0: 1, eth0: 2 и т. д.), каждый псевдоним указывает на частный IP-адрес, который, в свою очередь, указывает на общедоступный IP-адрес.

Я пытаюсь найти лучший способ выделить частный IP-адрес и, возможно, номер порта для каждого экземпляра моей Java-программы. В настоящее время я вызываю Ghostdriver внутри своей программы.

Способ, которым я вызываю драйвер-призрак в своей программе:

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 по умолчанию.

Вывод из работающей банки:

*12 апреля 2015 г. 17:26:25 org.openqa.selenium.phantomjs.PhantomJSDriverService INFO: порт: 8651 12 апреля 2015 г. 17:26:25 org.openqa.selenium.phantomjs.PhantomJSDriverService INFO: аргументы: [- -webdriver=172.16.190.131:6781, --webdriver=8651, --webdriver-logfile=/home/RemovedPath/phantomjsdriver.log] 12 апреля 2015 г. 17:26:25 org.openqa.selenium.phantomjs.PhantomJSDriverService INFO : среда: {} [INFO — 2015-04-12T21:26:26.584Z] GhostDriver — Main — работает на порту 8651

Порт 6781 с другим частным IP-адресом должен быть тем, что он использует, но вместо этого он использует 8651.


person Hydtek    schedule 11.04.2015    source источник
comment
Я могу установить любую возможность, но --webdriver=port, кажется, вы не можете изменить это, или это ошибка?   -  person Hydtek    schedule 15.04.2015
comment
Могу ли я хотя бы изменить порт, который он использует? Таким образом, я могу использовать iptables для управления трафиком. В настоящее время он просто выбирает порт случайным образом.   -  person Hydtek    schedule 16.04.2015


Ответы (3)


Я смог найти хакерский способ установить порт, но до сих пор не понял, как установить частный 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();
}
person Hydtek    schedule 21.04.2015
comment
HALP, должен быть лучший способ сделать это. - person Hydtek; 21.04.2015

Попробуйте это --> List<String> cliArgsCap = Arrays.asList( "--webdriver=172.16.190.131:6781"); dcaps.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, cliArgsCap);

person Shawn Knight    schedule 13.04.2015
comment
К сожалению, это не сработало, это дало мне тот же результат, который я ранее опубликовал INFO: arguments: [--webdriver=172.16.190.131:6781, --webdriver=3205, --webdriver-logfile=/home/RemovedPath/phantomjsdriver. log] 12 апреля 2015 г. 17:26:25 [INFO - 2015-04-13T22:05:13.944Z] GhostDriver - Main - работает на порту 3205, поэтому похоже, что он переопределяет то, что я вставил для веб-драйвера с другим аргументом веб-драйвера. . - person Hydtek; 14.04.2015

Мне удалось найти исправление для команды --webdriver, https://github.com/detro/ghostdriver/pull/438, я скомпилировал эту банку и загрузил ее. Теперь я получаю

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);
person Hydtek    schedule 24.04.2015