質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Firefox

Mozilla Foundationによって作られた無料、オープンソース、クロスプラットフォームなウェブブラウザ

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

解決済

1回答

3338閲覧

Java8 + GeckoDriver + Seleinumで GeckoDriverに起動オプションを与える方法

nochi

総合スコア33

Firefox

Mozilla Foundationによって作られた無料、オープンソース、クロスプラットフォームなウェブブラウザ

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2017/06/07 10:08

javaでSelenium + GeckoDriver(Firefox) + SeleniumでWebクローラを作成しております。
GeckoDriverに --marionette-port 33333の起動オプションを与えたいのですが、できずにいます。

下記のコードで(*1)はGeckDriver起動オプションなしの例です。
それを(*2)に変えましたが、
The driver executable does not exist: /usr/bin/geckodriver --marionette-port 33333
の例外が発生します。

コマンドラインで
/usr/bin/geckodriver --marionette-port 33333
が正しく起動するのは確認済みです。

経緯:
クローラを連続運用すると、不定期なタイミングで
Marionette ERROR Error on starting server: [Exception... "Component returned failure code: 0x804b0036 (NS_ERROR_SOCKET_ADDRESS_IN_USE) [nsIServerSocket.initSpecialConnection]" nsresult: "0x804b0036 (NS_ERROR_SOCKET_ADDRESS_IN_USE)" location: "JS frame :: chrome://marionette/content/server.js :: MarionetteServer.prototype.start :: line 95" data: no]
のような例外でFirefoxの起動に失敗します。
例外メッセージから、すでにバインド済みのポートを使おうとして起動に失敗していると想像しました。

運用中のログには、
Marionette INFO Listening on port 35714
のようにListenしてるポートが記録されていますが、
webDriver取得の度に、ランダムにポートが選ばれ、この時に運悪くバインド済みのポートを引き当てると、
例外が発生するのでは?と考えました。
Firefoxは、GeckoDriver経由で起動されるため、GeckoDriverに --marionette-portの起動オプションを
与える方法を探っております。

lang

1現状のコード 2 3DesiredCapabilities capabilities = DesiredCapabilities.firefox(); 4capabilities.setBrowserName("firefox"); 5capabilities.setPlatform(Platform.WIN10); 6capabilities.setJavascriptEnabled(false); 7 8//firefox(marionette)とGeckoDriverの通信ポートを指定 9String portParam = " --marionette-port 33333"; 10 11//↓GeckoDriverは起動する 12(*1)System.setProperty("webdriver.gecko.driver","/usr/bin/geckodriver"); 13 14//↓GeckoDriverは起動しない。 15//例外が発生 16//java.lang.IllegalStateException: 17// The driver executable does not exist: /usr/bin/geckodriver --marionette-port 33333 18(*2)System.setProperty("webdriver.gecko.driver","/usr/bin/geckodriver" + portParam); 19 20WebDriver driver = new FirefoxDriver(capabilities);

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

前回に引き続き、質問内容と乖離したアプローチでの解決になりましたが、
今回、複数のサイトをスクレイピングするアプリにおいて、
単一URLにアクセスする毎に、WebDriverの取得、破棄を行う方式を採用していました。
それを起動時に一度取得したWebDriverをずっと使いまわす方式に変えて、今回投稿した問題を回避しました。

投稿2017/06/14 05:18

nochi

総合スコア33

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問