CentosサーバーのSelenium.webdriver
内からPhantomJS
を実行しようとしています。 PhantomJSはパス内にあり、ターミナルから正しく実行されています。ただし、スクリプトでは起動されているように見えますが、その後、指定されたポートで到達できません(プロバイダー29842および60099から2つの異なる開いているポートを試しましたが、どちらも機能せず、指定されたポートなしで起動しません)。
エラーはここSelenium.webdriver.common.utils
で発生します:
try:
socket_ = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket_.settimeout(1)
socket_.connect(("localhost", port))
socket_.close()
return True
except socket.error:
return False
これは私のスクリプトからのものです(パラメーターなしで実行可能ファイルへの完全なパスを書き込んでみましたが、どちらも機能しませんでした):
self.browser = webdriver.PhantomJS(
port=29842,
desired_capabilities={
'javascriptEnabled': True,
'platform': 'windows',
'browserName': 'Mozilla',
'version': '5.0',
'phantomjs.page.settings.userAgent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36"
}
)
そして、これはSelenium.webdriver.phantomjs.service
からWebドライバーを初期化するスクリプトです。私がチェックしたところ、subprocess.Popen
は実際にphantomjsを起動しましたが、エラーはwhileループで発生します。
try:
self.process = subprocess.Popen(self.service_args,
stdout=self._log, stderr=self._log)
except Exception as e:
raise WebDriverException("Unable to start phantomjs with ghostdriver.", e)
count = 0
while not utils.is_connectable(self.port):
print utils.is_connectable(self.port)
count += 1
time.sleep(1)
if count == 30:
raise WebDriverException("Can not connect to GhostDriver")
すべてのパッケージは最新バージョンです:python 2.7、Selenium2およびphantomjs1.9バイナリとghostdriverが統合されています。同じスクリプトをUbuntuローカルマシンで正しく動作させ、まったく同じことを実行しました。サーバー上で。サーバー上で何が違うのですか?
新しいバージョンにアップグレードした後、Ubuntuでこの問題が発生しました。すべてのnodejsとpythonパッケージを再インストールしましたが、問題が解決したと思うのは、nodejs
実行可能ファイルがnode
にシンボリックにリンクされていることを確認することでした。
これらは私が使用したコマンドです:
apt-get remove node nodejs
apt-get install build-essential python-dev phantomjs npm nodejs
ln -s /usr/bin/nodejs /usr/bin/node
npm install -g phantomjs
pip install Selenium bson BeautifulSoup pymongo
Linux Mint 14にnodejs-legacyパッケージをインストールすると、これが解決しました。
Sudo apt-get install nodejs-legacy
私にとって、これはファイアウォールの問題でした。ファントムを接続するには、開いているポートが必要です。ポートがファイアウォールによってブロックされている場合は、WebDriverException("Can not connect to GhostDriver")
を取得します。
修正するには:
_Sudo iptables -A INPUT -s 127.0.0.1 -p tcp --dport 65000 -j ACCEPT
_
driver = webdriver.PhantomJS(executable_path='/usr/local/bin/phantomjs', port=65000)
私はこの問題を抱えていて、何が原因であるかを突き止めました。 Facebookアプリケーションの開発に関する別のチュートリアルで、/ etc/hostsにnanoを入れて、これから変更するように言われました-
127.0.0.1 localhost
これに-
127.0.0.1 test1.com
ファイルを保存します。ちなみに、その後、PhantomJS()は動作しなくなりました。/etc/hostsファイルに戻って、ローカルホストに戻しました。
127.0.0.1 localhost
そしてそれは再び働きます。
PhantomjsでSeleniumを使用してpython/Djangoアプリケーションをテストしています。最初のテスト(場合によっては2番目のテスト)ではすべて正常に機能しましたが、次のテストを実行すると、Seleniumはまったく同じエラーメッセージを出力しました。
さらに、後でコンソールからphantomjsを実行すると、次のノードエラーが発生しました。
child_process.js:1136 var err = this._handle.spawn(options);
^
TypeError: Bad argument
at TypeError (native)
at ChildProcess.spawn (child_process.js:1136:26)
at exports.spawn (child_process.js:995:9)
at Object.<anonymous> (/usr/local/lib/node_modules/phantomjs/bin/phantomjs:22:10)
at Module._compile (module.js:460:26)
at Object.Module._extensions..js (module.js:478:10)
at Module.load (module.js:355:320)
at Function.Module._load (module.js:310:12)
at Function.Module.runMain (module.js:501:10)
at startup (node.js:129:16)
Npmを介して(ローカルとグローバルの両方で)phantomjsを数回再インストールしようとしましたが、動作が持続しました。
最終的に、私はnpmを介してphantomjsをアンインストールし、phantomjs.orgからphantomjsビンをダウンロードしました代わりに。それを私の/ usr/local/bin(私はMacOSを使用しています)の中に入れて、それ以来エラーを取り除きました!