2017-06-05 23 views
0

私は、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

答えて

0

は最終的に問題を解決でした。 FirefoxのバイナリがPHP exec()を介してスクリプトを実行している間に何とか自動的に見つからないようです。そのため、問題の修正は次のようにしました。

from pyvirtualdisplay import Display 
from selenium import webdriver 
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary 

display = Display(visible=0, size=(800, 600)) 
display.start() 

binary = FirefoxBinary('/usr/bin/firefox') 
driver = webdriver.Firefox(firefox_binary=binary) 

print("Driver started") 

driver.quit() 
display.stop() 
関連する問題