6

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

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

4

3 回答 3

5

这个小技巧使用了一种简单的技术:它在 PhantomJS 或 CasperJS 使用 captureBase64('png') 看到它时抓取屏幕,然后将图像发布到接收服务器,然后通过 socket.io 将其发送到显示的浏览器它是内联图像。

源代码可在 github 上找到:

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

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

并按照其他人的建议使用远程调试

于 2014-04-30T13:49:51.160 回答
2

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

首先,我强烈建议您阅读故障排除部分

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

于 2013-08-13T07:30:24.653 回答
1

虽然不能解决您的 Phantomjs 问题,但我认为 Selenium 与 Python 绑定可以非常有效地用作 Linux 环境中的无头抓取工具。

您可以使用 PyVirtualDisplay,一个用于 Xvfb 和 Xephyr 的 Python 包装器来伪造显示。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()
于 2014-10-10T07:51:48.540 回答