2013-07-31 2 views
6

Ich verwende Phantomjs, um einen Web-Crawler zu erstellen. Mein aktueller Crawler ist ein Python-Skript, das Selen verwendet, für das ein laufender Firefox-Browser erforderlich ist. Während Selenium gut zum Debuggen von Skripten ist (da ich Firebug verwenden kann, um die Webseite zu inspizieren), kann es nicht auf Linux-Servern ohne GUI bereitgestellt werden. Also versuche ich mein Python-Skript in phantomjs zu übersetzen.Eine GUI zum Debuggen von Phantomjs-Skript

Um Phantomjs Skripte zu debuggen, speichere ich die Seitenquelle html und rende einen PNG Screenshot auf die Festplatte, und öffne es in Firefox, um die Quellseite zu überprüfen. Ich frage mich, ob es einen besseren Weg gibt, dies zu tun, z.B. ein Plugin für phantomjs, etc.

+1

Verwenden Sie Remote-Debugging. –

Antwort

2

Wie bei den meisten JS-Skripten ist es nicht so trivial, Phantomjs-Skript zu debuggen, weil dahinter kein IDE/Compiler steht.

Zuerst empfehle ich Ihnen, die Troubleshooting section zu lesen. Wie von torazaburo gesagt, ist die beste Option, Remote Debugging zu verwenden: Skripte können in einer webinspektor-ähnlichen Konsole ausgeführt werden: Step-In, Step-Out, Breakpoints, lokale Variablen ... viele klassische Debugger Funktionen sind verfügbar. Wenn Sie mit den Entwicklern von Chrome vertraut sind, ist es ziemlich ähnlich.

4

Dieser kleine Hack verwendet eine einfache Technik: Er greift den Bildschirm wie PhantomJS oder CasperJS sieht ihn mit captureBase64 ('png') und dann sendet er das Bild auf den empfangenden Server, der es dann über socket.io an Der Browser, der sie anzeigt, ist ein Inline-Bild.

Der Quellcode ist auf Github verfügbar:

https://github.com/maciejjankowski/flaming-octo-puss

Ich bin mir nicht sicher, ob es PhantomJS, aber CasperJS tut (und letztere fügt einige zusätzliche Funktionen zu PhantomJS)

und Verwenden Sie Remote-Debugging, wie andere vorschlagen

1

Obwohl keine Lösung für Ihre Phantomjs Probleme, ich denke, Selen mit Python-Bindungen kann sehr effizient als Headless-Schaber in einer Linux-Umgebung verwendet werden.

Sie können PyVirtualDisplay, einen Python-Wrapper für Xvfb und Xephyr verwenden, um eine Anzeige zu fälschen.PyVirtualDisplay benötigt Xvfb als Abhängigkeit. Unter Ubuntu erste Xvfb installieren:

sudo apt-get install xvfb 

dann PyVirtualDisplay von PyPI installieren:

pip install pyvirtualdisplay 

Beispiel Selen Skript in Python in einem Headless Modus mit PyVirtualDisplay:

#!/usr/bin/env python 

from pyvirtualdisplay import Display 
from selenium import webdriver 

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

# now Firefox will run in a virtual display. 
# you will not see the browser. 
browser = webdriver.Firefox() 
browser.get('http://www.google.com') 
print browser.title 
browser.quit() 

display.stop() 
0

habe ich eine REPL für horseman das könnte Sie interessieren. Es könnte ziemlich leicht in eine Phantom REPL verwandelt werden. Ich warf es ziemlich schnell zusammen, so dass der Code nicht der beste ist, aber es funktioniert. link.