2017-11-13 34 views
1

PythonでSeleniumと(tor)Firefoxを使用しているWebスクレイピングスクリプトがあります。これは、IDEまたはcmdから手動でスクリプトを起動すると完全に正常に動作します。しかし、私はオフィスにいないときにこのスクリプトを実行する必要があるので、Windowsタスクスケジューラによって起動されるバッチスクリプト(他のスクレイピングスクリプトとともに)を使って実行します。繰り返しますが、このバッチファイルを手動で実行すると、スクリプトは完全に実行されます。スケジュールされたタスクが実行されると、他の一方で、それは、すぐにwebdriverをは、次の役に立たないエラーメッセージを表示して設定されているとして失敗します。Windowsタスクスケジューラを実行しているときにのみSelenium Firefoxが読み込まれない

Traceback (most recent call last): 
    ... 
    #private library traceback 
    ... 
    File "redacted.py", line 322, in redacted_func 
    driver = webdriver.Firefox() 
    File "C:\Program Files\Python 3.5\lib\site-packages\selenium\webdriver\firefox\webdriver.py", line 152, in __init__ 
    keep_alive=True) 
    File "C:\Program Files\Python 3.5\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 98, in __init__ 
    self.start_session(desired_capabilities, browser_profile) 
    File "C:\Program Files\Python 3.5\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 188, in start_session 
    response = self.execute(Command.NEW_SESSION, parameters) 
    File "C:\Program Files\Python 3.5\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 256, in execute 
    self.error_handler.check_response(response) 
    File "C:\Program Files\Python 3.5\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 194, in check_response 
    raise exception_class(message, screen, stacktrace) 
selenium.common.exceptions.WebDriverException: Message: Process unexpectedly closed with status: 0 

誰もがこのエラーがタスクから実行た場合にのみ発生する理由を任意のアイデアを持っていますスケジューラ?

+0

スケジュールされたタスクを別のユーザーとして実行していますか? – Marcel

+0

タスクは、プロセスを手動で正常に実行できるユーザーと同じユーザーとして実行されています。 – birdcolour

答えて

3

さらに調査した結果、タスクがバックグラウンドで処理されたときにエラーが発生することがわかりました。これは、タスクが「ユーザーがログオンしているかどうかを実行する」に設定されている場合に発生します。この設定を「ユーザーがログオンしているときのみ実行する」に変更すると、タスクはフォアグラウンドで問題なく実行できます。

何らかの理由で、バックグラウンドで実行するとfirefoxがクラッシュしますが、chromedriver(これは他のスクラップスクリプトで使用されています)は影響を受けません。これはやや奇妙なようですが、この回避策はWindows上で実行するには十分です。

+0

「ユーザーがログオンしているときのみ実行する」設定は有効ですが、スケジュールされたタスクが実行される予定のときにユーザーが実際にサーバーにログオンする必要があるため、スケジュールされたタスクを自動的に実行することができません。 –

+0

私はこれがどのようにポイントを見逃しているのか見当たりませんか?あなたはバグ修正が必要なので、firefoxはエラーなしでバックグラウンドで実行されます(私はお手伝いできません)。または対話的にタスクを実行するためにユーザにログインします。結局のところ、あなたが好きなときにタスクを実行することは、結局のところ、タスクスケジューラのポイント... – birdcolour

関連する問題