我正在使用phantomjs来构建网络爬虫。我当前的抓取工具是使用selenium的Python脚本,需要运行Firefox浏览器。虽然Selenium适合调试脚本(因为我可以使用firebug来检查网页),但是如果没有GUI,它就无法部署在linux服务器上。所以我试图将我的Python脚本翻译成phantomjs。
要调试phantomjs脚本,我保存页面源html并将png屏幕截图渲染到磁盘,然后在Firefox中打开它以检查源页面。我想知道是否有更好的方法来做到这一点,例如phantomjs的插件等。
答案 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()