无法在Ubuntu VPS上使用Flask运行PhantomJS

时间:2015-01-03 08:50:13

标签: python ubuntu selenium flask

我正在做一个测试单元,要求通过Web浏览器运行测试。我正在使用安装了LAMP堆栈的Ubuntu VPS 14,mod_wsgi,selenium 2.44和PhantomJS 1.9。我首先使用非常简单的代码进行测试:

from flask import Flask, request
from selenium import webdriver

app = Flask(__name__)
app.debug = True

@app.route("/test")
def test():
    url = "http://www.google.com"
    driver = webdriver.PhantomJS('./phantomjs')
    driver.get(url)
    result = driver.page_source
    driver.close()
    return result

if __name__ == "__main__":
  app.run() 

代码在我的本地Ubuntu上运行非常流畅,当我连接到127.0.0.1:5000/test时,它打印出google页面。在我的Ubuntu VPS上,我已经安装并运行了我的烧瓶。现在我使用相同的代码作为索引文件(假设所有配置都正常并且'hello world'运行),连接到http://xxx.xxx.xxx.xxx/test时有500内部服务器错误

Apache日志发出以下错误:

  

... service_args = service_args,log_path = service_log_path文件   “/usr/local/lib/python2.7/ddist-packages/selenium/webdriver/phantomjs/service.py”   第53行,在 init 中       >中的self._log = open(log_path,'w')忽略异常AttributeError:“'服务'对象   在中没有属性'_log'“

我更改了phatomJS的log_path但仍然遇到了同样的问题。但是,如果我打开python控制台,按行执行如下操作:

from selenium import webdriver
br = webdriver.PhantomJS('./phantomjs')
....

我没有错误。我花了一整天来解决问题,但我无法修复它。任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

找出问题,当前的phantomjs和 init .py没有足够的权限来操纵ghostdriver的service.py。这是修复:

  1. 添加新用户:“添加用户名”,然后设置“添加用户名sudo”
  2. 登录新用户,确保从现在开始运行的每个命令都以“sudo”
  3. 开头
  4. init .py所在的烧瓶应用程序中,创建“ghostdriver.log”和“phantomjs”,这是一个可执行文件。
  5. 将他们两个都改为777: init .py,ghostdriver.log和phantomjs
  6. 为phantomjs在 init .py中设置自定义配置:

    br = webdriver.PhantomJS(service_log_path ='。/ ghostdriver.log',executable_path ='。/ phantomjs')

  7. 就是这样,现在你的selenium + flask + phantomjs现在正常工作。