4

我想自动化与网页的交互。到目前为止,我一直在使用 pycurl,但最终网页将使用 javascript,所以我正在寻找替代方案。典型的交互是“打开页面,搜索一些文本,单击链接(打开表单),填写表单并提交”。

我们正在 Google App 引擎上进行部署,如果这会有所作为的话。

澄清:我们正在 appengine 上部署网页。但是交互是在单独的机器上运行的。所以硒似乎是最好的选择。

4

5 回答 5

6

Twill 和 mechanize 不做 Javascript,Qt 和 Selenium 不能在 App Engine ((1)) 上运行,App Engine ((1)) 只支持纯 Python 代码。我不知道任何纯 Python Javascript 解释器,这是您在 App Engine 上部署支持 JS 的抓取工具所需要的:-(.

也许Java中有一些东西,至少可以让您在(Java版本的)App Engine上进行部署?Java 和 Python 中的 App Engine 应用程序版本可以使用相同的数据存储区,因此您可以将应用程序的某些部分保留在 Python 中……而不是需要理解 Javascript 的部分。不幸的是,我对 Java / AE 环境知之甚少,无法建议尝试任何特定的包。

((1)):澄清一下,因为似乎存在一种误解,以至于我被否决了:如果您在另一台计算机上运行 Selenium 或其他抓取工具,您当然可以定位在 App Engine 中部署的站点(无论您定位的网站是如何部署的,它使用什么编程语言等等,只要它是一个您可以访问的网站[[真实网站:flash,&c,可能是不同的]])。我如何阅读这个问题是,OP 正在寻找将抓取作为 App Engine 应用程序的一部分运行的方法——是有问题的部分,而不是您(或其他人;-)运行被抓取的网站!

于 2009-12-03T03:14:52.257 回答
4

硒呢?( http://seleniumhq.org )

于 2009-12-03T01:11:22.380 回答
1

您是否尝试过将 QtWebKit 与 PyQt 一起使用,您可以加载特定的 url 并从 Python 读取内容。然后您可以搜索 url 并再次使用 Webkit 来访问它。我认为所有这些都可以通过一些基本的 Django(假设您在 GAE 上使用 Django)视图测试来完成,这将测试响应代码。如果您想以 GUI 方式进行操作,这里有一个示例 QtWebKit PyQt 代码可以帮助您入门:

import sys
import time

from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *

app = QApplication(sys.argv)

web = QWebView()

settings = web.settings()
settings.setAttribute(QWebSettings.PluginsEnabled, True)
settings.setAttribute(QWebSettings.JavaEnabled, True)
settings.setAttribute(QWebSettings.JavascriptCanOpenWindows, True)
settings.setAttribute(QWebSettings.JavascriptCanAccessClipboard, True)
settings.setAttribute(QWebSettings.DeveloperExtrasEnabled, True)
settings.setAttribute(QWebSettings.ZoomTextOnly, True)



settings.setOfflineStoragePath('.')
settings.setIconDatabasePath (".")

url = 'http://stackoverflow.com'

web.load(QUrl(url))

web.show()

sys.exit(app.exec_())
于 2009-12-03T15:19:24.977 回答
0

检查机械化。它应该能够很容易地处理您的“典型交互”。另一种选择可能是Selenium,但我从未亲自使用过它。

于 2009-12-03T01:11:50.913 回答
0

斜纹布非常轻巧,但效果很好。

于 2009-12-03T02:21:46.243 回答