2009-12-03 31 views
4

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

我们正在部署Google App引擎,如果这有所影响。

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

+1

你应该“接受”呢! :) – nicolaskruchten

+0

谢谢!将做:) – nafe

+0

投票结束作为工具rec。 –

回答

0

退房mechanize。它应该能够很容易地处理你的“典型互动”。另一个选项可能是Selenium,但我从未亲自使用它。

+0

机械化做JS吗? –

+0

@Paul Biggar:编号 – nosklo

0

twill非常轻巧,但效果很好。

+0

谢谢约翰,斜纹将是伟大的,除非它似乎不支持JavaScript,这是我的应用程序的下一步。 – nafe

6

Twill和机械化不做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应用程序的一部分运行 - 是有问题的部分,而不是您(或其他人;-)运行的位置该网站被刮!

+0

谢谢亚历克斯,这很有用。 python spidermonkey会诀窍吗?否则,我想我应该开始寻找Java库... – nafe

+0

nafe,你在App Engine上部署什么?包含表单的页面,或者您实际尝试将自动化脚本部署到App Engine的页面。如果您正在运行App Engine之外的自动化脚本,则Selenium将成为您的首选。Python spidermonkey无法在App Engine上运行 - 引擎盖下有大量的C语言。如果你要用java,看看HTMLUnit,它可以处理一些javascript。 –

+0

硒对Appengine起作用。 Se:使用Python的RC可以很容易地浏览网站。我测试了我的应用引擎应用 – AutomatedTester

1

您是否尝试过在PyQt中使用QtWebKit,您可以加载特定的URL并从Python中读取内容。然后,您可以搜索网址并再次使用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_()) 
+0

Qt不会在应用引擎上运行(当然,您可以将_target_网站部署在应用引擎中,但是您不能将_run_ Qt作为您GAE应用的一部分)。 –