Perl如何与ajax表单进行交互

时间:2010-03-11 22:09:06

标签: java ajax perl

我正在编写一个perl程序,它正在执行一个简单的get命令来检索结果并处理它们。但该站点已更新,现在有一个处理结果的java组件(因此实际数据不再在源代码中)。

这是网站: http://wro.westchesterclerk.com/legalsearch.aspx

尝试投入:
索引号:11103
年份:2009

我希望能够以编程方式在表单底部输入“索引编号”和“年份”,其中显示“按编号搜索”,然后检索其旁边列出的结果。

我在Perl中编写了许多程序,它们只是通过URL传递变量,结果列在源代码中,因此很容易解析。 (使用LWP:简单)

像:

$html = get("http://www.url.com?id=$somenum&year=$someyear")

但这对我来说是全新的,我不知道从哪里开始。 我对LWP有点熟悉:UserAgent和Mechanize。

我真的很感激任何帮助。

谢谢!

3 个答案:

答案 0 :(得分:3)

这种问题被问到了很多。标准答案是Wireshark

我刚刚在该网站上使用了您提供的测试数据,并提取了一个负责任的POST请求。这可以让你完全绕过Javascript。

答案 1 :(得分:2)

使用其中一个驱动浏览器的模块可能更符合逻辑。类似于Mozilla::Mechanize或Selenium工具。

浏览器最了解如何使用AJAX与服务器交互并重新渲染DOM等,因此在该功能之上构建脚本。

答案 2 :(得分:0)

您在此案例中要求做的事情很难。不是不可能,但很难。

方法A:   你可以筛选他们的JavaScript代码。他们的“ajax”正在做的是向另一个网页发出get / post请求并动态加载结果。如果您可以破译该链接的内容以及您可以继续使用的正确参数。我会重新获得firebug插件以及任何其他可以帮助您对其javascript进行去混淆的工具。

另一种方法: 如果您的程序可以访问Web浏览器(使用javascript url支持。如firefox)。您可以编程转到这些地址,然后等一下,获取您的数据。

http://wro.westchesterclerk.com/legalsearch.aspx
javascript: function go() { document.getElementById('ctl00_tbSearchArea__ctl1_cphLegalSearch_splMain_tmpl0_tbLegalSearchType__ctl0_txtInde    xNo').value=11109; document.getElementById('ctl00_tbSearchArea__ctl1_cphLegalSearch_splMain_tmpl0_tbLegalSearchType__ctl0_txtYear').value='09';searchClick();} go();

这是我们与mozembed一起使用的方法,以编程方式解决这些问题。最近我们切换到Web Kit。为了消除视频显示,我们使用Xvfb / Xvnc创建了一个虚拟桌面来加载浏览器。


到目前为止,这些是我提出的方法。如果你想出另一个,请告诉我。我也希望能帮到你。