在python中自动与网页进行交互

时间:2009-12-03 00:59:56

标签: python google-app-engine pycurl

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

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

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

5 个答案:

答案 0 :(得分:6)

斜纹和机械化不做Javascript,Qt和Selenium不能在App Engine((1))上运行,它只支持纯Python代码。我不知道任何纯Python Javascript解释器,这是你需要在App Engine上部署支持JS的刮刀: - (。

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

((1)):澄清一下,因为似乎存在一个误解,直到让我被投票:如果你在不同的计算机上运行Selenium或其他刮刀,你当然可以针对部署的网站在App Engine中(无论你如何部署你所定位的网站,使用什么编程语言等等,只要它是一个你可以访问的网站[[真正的网站:flash,& c,可能会有所不同]])。我如何阅读这个问题,OP正在寻找方法让抓取作为App Engine应用程序的一部分运行 - 是有问题的部分,你(或其他人;-)在哪里运行被抓的网站!

答案 1 :(得分:4)

硒怎么样? (http://seleniumhq.org

答案 2 :(得分:1)

您是否尝试将QtWebKit与PyQt一起使用,您可以加载特定的URL并从Python中读取内容。然后,您可以搜索URL并再次使用Webkit访问它。我认为所有这些都可以用一些基本的Django(假设你在GAE上使用Django)视图测试,它将测试响应代码。下面是一个示例QtWebKit PyQt代码,如果您想以GUI方式执行它,那么就可以开始使用它:

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_())

答案 3 :(得分:0)

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

答案 4 :(得分:0)

twill非常轻巧但效果很好。