2012-01-31 62 views
0

我目前正在使用不同的刮擦技术,并发现,它可以很快就会变得很复杂,当涉及大量的JavaScript。 我在HTMLUnit方面取得了一些成功,它似乎很好地解释了JavaScript,但我正在寻找更轻量级的解决方案。如何从JSF网站上抓取Ajax生成的内容?

所以,我现在面临的问题是:我想检索一个特定页面的结果,这是由某个按钮点击ajax调用生成的。 这个调用本身很简单,只是一个HTTP Post到一个特定的URL,在邮件正文中提交了一些参数。我现在的问题是服务器抱怨,当我提交HTTP POST到ajax函数而没有真正打开包含网站。

我基本上为测试做的是:

curl -v -d "AJAXREQUEST=..." https://myhost/ajaxurl 

的是我得到的是:

<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     <meta name="Ajax-Response" content="true" /> 
     <meta name="Ajax-Expired" content="View state could't be restored - reload page ?" /> 
    </head> 
    </html> 

服务器运行的是JSF 1.2。我需要做些什么才能从AJAX调用中获得结果?我不是JSF的专家......

回答

0

如果我不得不猜测,JSF没有与使用curl发送的请求相关联的会话,因此与页面关联的对象不存在。卷曲看看http://curl.haxx.se/docs/httpscripting.html第10节,饼干。你将不得不拉动页面,获取cookie然后用cookies来做http post(开始用curl工作很多)。

但是我会建议看一下Selenium,它有一个IDE,用于生成Java以与JavaScript进行交互。

+0

据我所知你需要一个浏览器来使用Selenium,对吧?我想要更轻量级的东西(例如,可以完全用java或javascript实现的东西),而不需要额外的软件/进程。 – Julian 2012-01-31 16:49:34

+0

卷曲的方式是:'curl -c cookies myajaxurl',然后是'curl -b cookies -d“AJAXREQUEST = ...”myajaxurl' – Julian 2012-03-02 19:55:56