2013-07-31 10 views
6

डीबग करने के लिए मैं एक वेब क्रॉलर बनाने के लिए phantomjs का उपयोग कर रहा हूँ। मेरा वर्तमान क्रॉलर सेलेनियम का उपयोग कर एक पायथन लिपि है, जिसके लिए एक फ़ायरफ़ॉक्स ब्राउज़र चलाना आवश्यक है। जबकि सेलेनियम स्क्रिप्ट को डिबग करने के लिए अच्छा है (क्योंकि मैं वेबपृष्ठ का निरीक्षण करने के लिए फायरबग का उपयोग कर सकता हूं), इसे जीयूआई के बिना लिनक्स सर्वर पर तैनात नहीं किया जा सकता है। तो मैं अपनी पाइथन लिपि को phantomjs में अनुवाद करने की कोशिश कर रहा हूं।एक जीयूआई phantomjs स्क्रिप्ट

फ़ैंटोमज स्क्रिप्ट को डीबग करने के लिए, मैं पृष्ठ स्रोत HTML को सहेजता हूं और डिस्क पर एक पीएनजी स्क्रीनशॉट प्रस्तुत करता हूं, और स्रोत पृष्ठ का निरीक्षण करने के लिए इसे फ़ायरफ़ॉक्स में खोलता हूं। मैं सोच रहा हूं कि ऐसा करने का एक बेहतर तरीका है, उदा। phantomjs के लिए एक प्लगइन, आदि

+1

रिमोट डीबगिंग का उपयोग करें। –

उत्तर

2

जेएस स्क्रिप्ट के अधिकांश के रूप में, यह phantomjs स्क्रिप्ट डीबग करने के लिए इतना छोटा नहीं है, क्योंकि इसके पीछे कोई आईडीई/कंपाइलर नहीं है।

सबसे पहले, मैं आपको Troubleshooting section पढ़ने के लिए अत्यधिक सुझाव देता हूं।

जैसा कि टोरज़बूरो ने कहा था, आपका सबसे अच्छा विकल्प दूरस्थ डिबगिंग का उपयोग करना है: स्क्रिप्ट को वेब इंस्पेक्टर इंटरफ़ेस-जैसे कंसोल में चलाया जा सकता है: चरण-दर-चरण, चरण-बाहर, ब्रेक पॉइंट, स्थानीय चर ... कई क्लासिक डीबगर विशेषताएं उपलब्ध हैं। यदि आप क्रोम डेवलपर टूल के साथ familliar हैं, तो यह वही है।

4

यह छोटा हैक एक साधारण तकनीक का उपयोग कर रहा है: यह स्क्रीन को पकड़ता है क्योंकि फैंटॉमजेएस या कैस्परजेएस इसे कैप्चरबेस 64 ('पीएनजी') के साथ देखता है और फिर यह प्राप्तकर्ता सर्वर में छवि पोस्ट कर रहा है जो उसके बाद socket.io के माध्यम से भेजता है ब्राउज़र जो इसे प्रदर्शित करता है वह इनलाइन छवि के रूप में है।

स्रोत कोड GitHub पर उपलब्ध है:

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

मुझे यकीन है कि अगर PhantomJS यह है नहीं कर रहा हूँ, लेकिन CasperJS करता है (और बाद PhantomJS को कुछ अतिरिक्त फ़ंक्शन कहते हैं)

और रिमोट डीबगिंग का उपयोग करें क्योंकि अन्य लोग

1

हालांकि आपके फैंटोमज़ की परेशानी का समाधान नहीं है, मुझे लगता है कि लिथोन बाइंडिंग के साथ सेलेनियम का उपयोग लिनक्स पर्यावरण में एक हेडलेस स्क्रैपर के रूप में बहुत कुशलता से किया जा सकता है।

आप पीवीवीर्टुअल डिस्प्ले, एक्सवीएफबी और एक्सफिर के लिए एक पाइथन रैपर का उपयोग नकली प्रदर्शन के लिए कर सकते हैं। प्राइवर्टुअल डिस्प्ले को एक्सवीएफबी को निर्भरता के रूप में चाहिए। उबंटू पर, पहले Xvfb स्थापित: PyVirtualDisplay साथ एक बिना सिर मोड में अजगर में

pip install pyvirtualdisplay 

नमूना सेलेनियम स्क्रिप्ट:

sudo apt-get install xvfb 

तो Pypi से 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

मैं एक आरईपीएल बनाया horseman के लिए जो आपको रुचि हो सकती है। इसे फ़ैंटॉम आरईपीएल में आसानी से बदल दिया जा सकता है। मैंने इसे एक साथ बहुत जल्दी फेंक दिया ताकि कोड सबसे अच्छा न हो लेकिन यह काम करता है। link