2017-07-11 8 views
0

として開始されません。のPythonコンソールからOK webdriverをスクリプトが、私はセレンwebdriverをを使用してPythonスクリプトを実行する必要が成り上がりサービス

import platform 
from selenium import webdriver 
from pyvirtualdisplay import Display 

driver = None 

if platform.system() == 'Linux': 
    print("Initializing browser for chrome...") 
    DISPLAY = Display(visible=0, size=(800, 600)) 
    DISPLAY.start() 
    print("Started display") 
    chrome_options = webdriver.ChromeOptions() 
    chrome_options.add_argument('--no-sandbox') 
    driver = webdriver.Chrome('/usr/local/bin/chromedriver', chrome_options=chrome_options) 
    print("Done init chrome") 
    connected = True 
else: 
    try: 
     print("Starting firefox...") 
     driver = webdriver.Firefox() 
     connected = True 
    except: 
     print("Could not connect through firefox") 

if driver: 
    print("driver ok") 
    driver.quit() 
    print("All ok") 

スクリプトは、コンソールからOK実行します:

sudo ~/environments/scrapers/bin/python test_webdriver.py 
Initializing browser for chrome... 
Started display 
Done init chrome 
driver ok 
All ok 

しかし、成り上がりとexecのスタンザを使用して実行しようとする場合WebDriverExceptionエラーを与える:

Initializing browser for chrome... 
Started display 
... 
selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally 
    (Driver info: chromedriver=2.26.436382 (70eb799287ce4c2208441fc057053a5b07ceabac),platform=Linux 4.8.0-58-generic x86_64) 

このような起動スクリプトに不在のパスを追加しました。

env PYTHON_HOME=/home/rsa-key-20161031/environments/scrapers 
env PATH=/usr/local/bin:/usr/bin:$PYTHON_HOME:$PATH 
env ENV=production 
env DISPLAY=:10 
chdir /home/user/project 
console log 
exec $PYTHON_HOME/bin/python test_webdriver.py 

効果なし。エラーを検索してもこれに固有のものはありません。 この作業をどのように行うかについての洞察は非常に高く評価されます。

更新: 私の現在の解決策は、Xvfbを使用する際に問題がないと思われるので、Cronを使用することです。 Webdriverタスクをサービスとして実行することが可能かどうかを知りたいと思っています。私もリモートウェブドライバとしてSeleniumを使ってみましたが、同じ結果が得られませんでした(Chromeは仮想ディスプレイに接続できなくなった後に終了します)

+2

Upstartには、Chromeを起動するX-Windowsセッションがありません。 Upstartやその他のLinuxサービス管理システム(systemd、sysVinit)は、GUIに依存するサービスで使用するようには設計されていません。 –

+0

ありがとうございます。私がPyvirtualdisplay/start Xvfbを別のプロセス変更として使用するという事実は何ですか? –

答えて

1

pytestをセレンとFirefoxで実行するように設定しました。 webdriver。あなたは今でXVFBがパラメータ

xvfb-run --server-num=10 <script> 
としてあなたのスクリプトで呼び出されるように、あなたは、 exec位置した後、あなたの成り上がりファイルを調整することができますDebianの

sudo apt install xvfb 

xvfbすなわちをインストールできるソリューションとして

このようにxvfbがスクリプトの前で開始されます。

+0

良いアイデア、ありがとう。これを試しながら。 Xvfb-runを起動すると、 '/ usr/bin/xvfb-run:mktemp:not found'というエラーが表示され、mktempはシステムに存在します。それについての考えは? –

+1

@AlexBauskそれはほとんど動作することを聞いてうれしい。私は 'mktemp'はあなたのPATH変数の一部ではないと思います。それで 'which mktemp'(私の場合は'/bin')と入力し、コロンでパスを追加してください。 'env PATH =/bin:/ usr/local/bin:... ' – andpei

+0

うわー、実際にはうまくいきます。私はあなたの助けに非常に感謝しています!これは終わりまで私を悩ませている –

関連する問題