2013-06-11 3 views
25

Die Frage ist direkt, aber einige Kontext kann helfen.Wie kann ich den Pfad von GhostDriver.log deaktivieren oder ändern?

Ich versuche, Scrapy zu implementieren, während Selen und Phantomjs als Downloader verwenden. Das Problem ist jedoch, dass beim Erteilen der Bereitstellung weiterhin die Berechtigung verweigert wird. Also ich möchte den Pfad von Ghostdriver.log ändern oder einfach deaktivieren. Phantomjs-h und Ghostdriver github Seite guckend, konnte ich die Antwort nicht finden, mein Freund google ließ mich auch unten.

$ 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 
+0

Hmm, ich würde gerne deine Downloader Middleware sehen, ist es öffentlich? –

+0

Noch nicht wird es heute Abend öffentlich machen, es basiert auf scrapy-renderjs und scrapy-webdriver, aber vereinfacht haha. Ich habe es noch nicht vom Projekt getrennt und es deshalb nicht öffentlich gemacht. –

Antwort

29

Wenn der PhantomJS mit Treiber den folgenden Parameter hinzu:

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

zugehörigen Code, wäre schön, eine Option zu haben, obwohl zu deaktivieren Protokollierung, scheint das ist nicht unterstützt:

Selen /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') 
+0

Unter Windows kann ich meine Log-Datei einfach überall erstellen? – User

+0

@macdonjo Ich denke, wenn Sie einen "Windows-freundlichen" Pfad angeben, können Sie ihn beliebig platzieren, solange der Prozess Zugriff auf Dateien in dem von Ihnen bereitgestellten Pfad hat. Ich bin unter Linux –

+0

Hat jemand versucht mit '/ dev/null' als Protokollpfad zum Deaktivieren der Protokollierung? – hayavuk

15
#Reduce logging level 
    driver = webdriver.PhantomJS(service_args=["--webdriver-loglevel=SEVERE"]) 

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