Perl如何与ajax表单交互

3

我正在编写一个Perl程序,原本使用简单的get命令来检索结果并进行处理。但是该网站已经更新,现在有一个处理结果的Java组件(因此实际数据不再在源代码中)。

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

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

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

我已经用Perl编写了许多程序,只需通过URL传递变量即可,结果会列在源代码中,因此很容易解析。(使用LWP:Simple)

例如:

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

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

我真的很感激任何帮助。

谢谢!


你是指Java还是Javascript?http://www.sislands.com/coin70/week1/javajs.htm 提示:AJAX中的J并不代表Java。 - daotoad
好问题!我有点尴尬(特别是我有计算机科学学位),但实际上我不太清楚。我做了一个(可能很傻)的假设,认为它必须是ajax,因为它可以重新绘制页面的一部分而无需重新加载整个页面。至少我知道A代表异步! - Jeff
3个回答

3

这种问题经常被问到。标准答案是使用Wireshark

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


不错,我得试试看。 - J.J.
1
运行捕获,过滤HTTP,选择请求,从右键菜单中选择跟随TCP流。 - daxim

2

如果你要使用模块来驱动浏览器,可能更有逻辑性。例如 Mozilla::Mechanize 或 Selenium 工具。

浏览器最擅长使用 AJAX 与服务器交互并重新渲染 DOM 等操作,因此建议在该能力的基础上构建脚本。


0

这种情况下,你要求做的事情很难。不是不可能,但很难。

方法A: 你可以筛选他们的JavaScript代码。他们的“ajax”正在执行一个get/post请求到另一个网页并动态加载结果。如果你能解密那个链接和正确的参数,你就可以继续使用get。我建议获取firebug插件和任何其他工具,以帮助你解密他们的JavaScript。

另一种方法: 如果你的程序可以访问一个支持JavaScript URL的Web浏览器(如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创建了一个虚拟桌面来加载浏览器。


这些是我目前想到的方法。如果你有其他想法,请告诉我。同时,希望我的回答能对你有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接