【问题标题】:How to disable or change the path of ghostdriver.log?如何禁用或更改 ghostdriver.log 的路径?
【发布时间】:2013-06-07 13:37:17
【问题描述】:

问题很简单,但一些上下文可能会有所帮助。

我正在尝试部署 scrapy,同时使用 selenium 和 phantomjs 作为下载器。但问题是它在尝试部署时一直说权限被拒绝。所以我想改变 ghostdriver.log 的路径或者只是禁用它。看了 phantomjs -h 和 ghostdriver github page 我找不到答案,我的朋友 google 也让我失望了。

$ scrapy deploy
Building egg of crawler-1370960743
'build/scripts-2.7' does not exist -- can't clean it
zip_safe flag not set; analyzing archive contents...
tests.fake_responses.__init__: module references __file__
Deploying crawler-1370960743 to http://localhost:6800/addversion.json
Server response (200):
Traceback (most recent call last):
  File "/usr/lib/pymodules/python2.7/scrapyd/webservice.py", line 18, in render
    return JsonResource.render(self, txrequest)
  File "/usr/lib/pymodules/python2.7/scrapy/utils/txweb.py", line 10, in render
    r = resource.Resource.render(self, txrequest)
  File "/usr/lib/python2.7/dist-packages/twisted/web/resource.py", line 216, in render
    return m(request)
  File "/usr/lib/pymodules/python2.7/scrapyd/webservice.py", line 66, in render_POST
    spiders = get_spider_list(project)
  File "/usr/lib/pymodules/python2.7/scrapyd/utils.py", line 65, in get_spider_list
    raise RuntimeError(msg.splitlines()[-1])
RuntimeError: IOError: [Errno 13] Permission denied: 'ghostdriver.log

【问题讨论】:

  • 嗯,我很想看看你的下载器中间件,它是公开的吗?
  • 今晚还没有公开,它基于scrapy-renderjs和scrapy-webdriver但是简化了哈哈。我还没有把它从项目中分离出来,所以没有公开。

标签: scrapy phantomjs ghostdriver


【解决方案1】:

使用PhantomJS驱动时添加如下参数:

driver = webdriver.PhantomJS(service_log_path='/var/log/phantomjs/ghostdriver.log')

相关代码,如果有一个关闭日志记录的选项会很好,但似乎不支持:

selenium/webdriver/phantomjs/service.py

class Service(object):
    """
    Object that manages the starting and stopping of PhantomJS / Ghostdriver
    """

    def __init__(self, executable_path, port=0, service_args=None, log_path=None):
        """
        Creates a new instance of the Service

        :Args:
         - executable_path : Path to PhantomJS binary
         - port : Port the service is running on
         - service_args : A List of other command line options to pass to PhantomJS
         - log_path: Path for PhantomJS service to log to
        """

        self.port = port
        self.path = executable_path
        self.service_args= service_args
        if self.port == 0:
            self.port = utils.free_port()
        if self.service_args is None:
            self.service_args = []
        self.service_args.insert(0, self.path)
        self.service_args.append("--webdriver=%d" % self.port)
        if not log_path:
            log_path = "ghostdriver.log"
        self._log = open(log_path, 'w')

【讨论】:

  • 在windows上,我可以把我的日志文件放在任何地方吗?
  • @macdonjo 我认为,如果您提供“Windows 友好”路径,只要进程有权访问您提供的路径中的文件,您就可以将其放在任何您想要的位置。不过我在 Linux 上
  • 有没有人尝试使用'/dev/null'作为日志路径来禁用日志记录?
  • 好的,想通了。要禁用日志记录,请使用 os.path.devnull 作为路径。应该可以在任何带有空设备的系统上工作。
  • 我有一个相关的问题:How can we found these selenium phantomjs usages? 我想我很难在seleniumhq.org/docs 中找到这些用法
【解决方案2】:
    #Reduce logging level
    driver = webdriver.PhantomJS(service_args=["--webdriver-loglevel=SEVERE"])

    #Remove logging
    import os
    driver = webdriver.PhantomJS(service_log_path=os.path.devnull)

【讨论】:

    猜你喜欢
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 2011-09-10
    • 2012-06-21
    相关资源
    最近更新 更多