我想自动与网页进行互动。我一直在使用pycurl,但最终网页将使用javascript,所以我正在寻找替代方案。典型的互动是“打开页面,搜索某些文本,点击链接(打开表单),填写表格并提交”。
我们正在Google App引擎上进行部署,如果这有所不同的话。
澄清:我们正在在appengine上部署网页。但是交互是在一台单独的机器上运行的。所以硒似乎是最好的选择。
答案 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)
答案 4 :(得分:0)
twill非常轻巧但效果很好。