私は、SeleniumとFirefoxを使用していくつかのWebサイトを読み込んでコンテンツを処理するPythonスクリプトを作成しました。 PHPでそのスクリプトの出力を使用したいので、PHPのexec()関数を使用しています。PHP経由でSelenium webdriverを実行するexec()
私のPythonのテストスクリプトは次のようになります。
from pyvirtualdisplay import Display
from selenium import webdriver
import sys
display = Display(visible=0, size=(800, 600))
display.start()
driver = webdriver.Firefox()
print("Driver started")
driver.quit()
display.stop()
コマンドラインからそれを実行している、私が期待される出力を「ドライバが起動」を得ます。
次のようにPHPスクリプト内でそれを実行している場合しかし、:
exec("python test.py 2>&1", $output);
をPythonスクリプトは次のエラーを生成します。
Traceback (most recent call last):
File "test.py", line 8, in
driver = webdriver.Firefox()
File "/usr/lib/python2.6/site-packages/selenium-3.4.3-py2.6.egg/selenium/webdriver/firefox/webdriver.py", line 152, in __init__
keep_alive=True)
File "/usr/lib/python2.6/site-packages/selenium-3.4.3-py2.6.egg/selenium/webdriver/remote/webdriver.py", line 98, in __init__
self.start_session(desired_capabilities, browser_profile)
File "/usr/lib/python2.6/site-packages/selenium-3.4.3-py2.6.egg/selenium/webdriver/remote/webdriver.py", line 188, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "/usr/lib/python2.6/site-packages/selenium-3.4.3-py2.6.egg/selenium/webdriver/remote/webdriver.py", line 256, in execute
self.error_handler.check_response(response)
File "/usr/lib/python2.6/site-packages/selenium-3.4.3-py2.6.egg/selenium/webdriver/remote/errorhandler.py", line 194, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: Unable to find a matching set of capabilities
私は、コマンドライン上で私が実行してみましたことを言及する必要がありますrootとしても、別のユーザーとしても、両方ともスクリプトを作成してください。ウェブサーバーは、 "nginx"ユーザーを使用して実行していますが、これはWebサーバーが占有しているのでコマンドラインでは使用できません。しかし、私はテストユーザーと同様に、nginxユーザーもスクリプトを実行するために必要な許可をすべて持っていることを前提としています。
Firefoxバージョン:Mozilla Firefoxの52.1.0
セレンバージョン:3.4.3
Geckodriverバージョン:0.16.1