17

Centos サーバーPhantomJS内から実行しようとしています。selenium.webdriverPhantomJS はパスにあり、ターミナルから適切に実行されています。ただし、スクリプトでは起動されているように見えますが、その後、指定されたポートに到達できません (プロバイダー 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"
            }
        )

そして、これは から webdriver を初期化するスクリプトですselenium.webdriver.phantomjs.service。確認して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、selenium 2、および Ghostdriver が統合された phantomjs 1.9 バイナリ。サーバーで行ったのとまったく同じことを実行して、同じスクリプトを Ubuntu ローカル マシンで適切に動作させました。サーバー上での違いは何ですか?

4

5 に答える 5

9

新しいバージョンにアップグレードした後、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
于 2013-11-17T20:09:22.137 に答える
2

私はこの問題を抱えていて、何が原因であるかを突き止めました。Facebook アプリケーションの開発に関する別のチュートリアルで、/etc/hosts に nano in して、これを変更するように言われました-

127.0.0.1    localhost

これに-

127.0.0.1    test1.com

ファイルを保存します。ちなみに、その後 PhantomJS() は動かなくなりました。/etc/hosts ファイルに戻り、localhost に切り替えました。

127.0.0.1    localhost

そしてそれは再び機能します。

于 2015-08-04T18:01:10.287 に答える
2

私にとって、これはファイアウォールの問題でした。Phantom を接続するには、開いているポートが必要です。ポートがファイアウォールによってブロックされている場合は、WebDriverException("Can not connect to GhostDriver").

修正するには:

  1. ポートを開きます。

sudo iptables -A INPUT -s 127.0.0.1 -p tcp --dport 65000 -j ACCEPT

  1. そのポートを使用する PhantomJS ドライバーを作成する

driver = webdriver.PhantomJS(executable_path='/usr/local/bin/phantomjs', port=65000)

于 2015-02-16T18:10:24.927 に答える
1

phantomjs でセレンを使用して python/django アプリケーションをテストしています。最初のテスト (および場合によっては 2 番目のテスト) ではすべてが正常に機能しましたが、次のテストを実行すると、セレンはまったく同じエラー メッセージを出力しました。

さらに、後でコンソールから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を使用しています)、それ以来エラーを取り除きました!

于 2015-10-26T12:27:33.327 に答える