用于调试phantomjs脚本的GUI

时间:2013-07-31 08:48:22

标签: phantomjs

我正在使用phantomjs来构建网络爬虫。我当前的抓取工具是使用selenium的Python脚本,需要运行Firefox浏览器。虽然Selenium适合调试脚本(因为我可以使用firebug来检查网页),但是如果没有GUI,它就无法部署在linux服务器上。所以我试图将我的Python脚本翻译成phantomjs。

要调试phantomjs脚本,我保存页面源html并将png屏幕截图渲染到磁盘,然后在Firefox中打开它以检查源页面。我想知道是否有更好的方法来做到这一点,例如phantomjs的插件等。

3 个答案:

答案 0 :(得分:5)

这个小小的黑客正在使用一种简单的技术:它抓住屏幕,因为PhantomJS或CasperJS用captureBase64(' png')看到它,然后它将图像POST到接收服务器,然后通过接收服务器发送它socket.io到显示它的浏览器是内嵌图像。

源代码可在github上找到:

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

我不确定PhantomJS是否拥有它,但是CasperJS确实(并且后者为PhantomJS添加了一些额外的功能)

并像其他人建议的那样使用远程调试

答案 1 :(得分:2)

对于大多数JS脚本,调试phantomjs脚本并不是那么简单,因为这背后没有IDE /编译器。

首先,我强烈建议您阅读Troubleshooting section

正如torazaburo所说,您最好的选择是使用远程调试:脚本可以在类似Web Inspector界面的控制台中运行:步入,步出,断点,局部变量......许多经典调试器功能可用。如果您熟悉Chrome开发工具,那就完全相同了。

答案 2 :(得分:1)

虽然不是Phantomjs麻烦的解决方案,但我认为使用Python绑定的Selenium可以非常有效地用作Linux环境中的无头刮刀。

你可以使用PyVirtualDisplay,一个Xvfb和Xephyr的Python包装来伪造display.PyVirtualDisplay需要Xvfb作为依赖。在Ubuntu上,首先安装Xvfb:

sudo apt-get install xvfb

然后从Pypi安装PyVirtualDisplay:

pip install pyvirtualdisplay

使用PyVirtualDisplay以无头模式在Python中使用示例Selenium脚本:

#!/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()