Javascript 如何将查询提交到.do页面

Javascript 如何将查询提交到.do页面,javascript,database,dojo,download,automation,Javascript,Database,Dojo,Download,Automation,这是我第一次在stackexchange上,面对一个我花了很多时间在Google上却找不到解决方案的问题。由于缺少更多图片,请提前道歉,stackexchange将不允许我添加更多照片,直到我的声誉提高 我需要从.do页面获取结果: 当出现大型查询时,url保持静态,例如 已提交-我无法通过更改url来更改查询 一旦提交,加载需要很长时间,加载后,将显示一个结果表 然后,我要求所有数据都在一个页面上,因此我从表左上角的下拉菜单中选择“全部查看”作为页面大小,以获得下一页(其中的行数比此处显示

这是我第一次在stackexchange上,面对一个我花了很多时间在Google上却找不到解决方案的问题。由于缺少更多图片,请提前道歉,stackexchange将不允许我添加更多照片,直到我的声誉提高

我需要从.do页面获取结果:

当出现大型查询时,url保持静态,例如

已提交-我无法通过更改url来更改查询

一旦提交,加载需要很长时间,加载后,将显示一个结果表

然后,我要求所有数据都在一个页面上,因此我从表左上角的下拉菜单中选择“全部查看”作为页面大小,以获得下一页(其中的行数比此处显示的多)

最后,为了导入这些数据,我打开了一个电子表格并将其全部复制粘贴进去

即使是一个县/查询/提交,这个过程也非常繁琐,我每月都要为大约20个县,然后是另外10个县做这个。由于与每个查询的返回相关联的加载时间较长,这是一项很容易需要2-3小时才能完成的任务

因此,我希望这里有人能提供某种解决方案来自动化/简化流程,甚至简单地建议我在哪里可以找到信息来自己创建解决方案。如果我可以直接查询数据库并将数据导入电子表格,我的问题就会得到解决。如果查询服务器的整个过程可以自动化,那么加载时间就无关紧要了,因为它可以在后台运行,而无需用户输入

我为这个冗长而不具体的问题道歉,任何回复都将不胜感激


非常感谢。

根据您的描述,这听起来像是数据库花时间生成结果的问题

如果是这种情况,您是否知道正在查询的数据库上是否有索引

如果您正在跨多个链接表(看起来和听起来像)查询数据,而没有任何索引,那么查询将像狗一样运行

该网站提供了一个很好的索引介绍,可能值得一看

除此之外,设置cron来自动执行评论中描述的过程可能是很普遍的


我建议您查看索引并设置cron作业,因为您可以完全自动化它,让它在几分钟内运行,而不是每月几个小时,而不仅仅是减少每月生成数据所需的时间,实际上,您可以检查执行的网络调用以获取CSV文件。我只是为你做了这些,但是它包含了很多你需要发送的参数。以下是您需要发送的实际参数:

searchArgs.orderByColumnName=
&searchArgs.initialViewArgHndlr.inputValue=County
&searchArgs.startMonthArgHndlr.inputValue=01
&searchArgs.startYearArgHndlr.inputValue=1993
&searchArgs.endMonthArgHndlr.inputValue=01
&searchArgs.endYearArgHndlr.inputValue=2013
&searchArgs.oilOrGasArgHndlr.inputValue=
&searchArgs.gasWellNoHndlr.inputValue=
&searchArgs.searchTypeHndlr.inputValue=production
&searchArgs.viewTypeHndlr.inputValue=monthlyTotals
&searchArgs.activeTabsFlagwordHndlr.inputValue=11
&searchArgs.orderByHndlr.inputValue=
&searchArgs.leaseTypeArgHndlr.inputValue=O
&searchArgs.districtCodeArgHndlr.inputValue=
&searchArgs.leaseNumberArgHndlr.inputValue=
&searchArgs.fieldNumbersArgHndlr.inputValue=
&searchArgs.fieldNamesHndlr.inputValue=
&searchArgs.operatorNumbersArgHndlr.inputValue=
&searchArgs.operatorNamesHndlr.inputValue=
&searchArgs.onShoreCountyCodeArgHndlr.inputValue=001
&searchArgs.offShoreCountyCodeArgHndlr.inputValue=
&searchArgs.leaseNameArgHndlr.inputValue=
&searchArgs.geoRegionOptionHndlr.inputValue=county
&searchArgs.statewideFlagHndlr.inputValue=
&methodToCall=generateProductionQueryReportCsv
&actionManager.recordCountHndlr.inputValue=2
&actionManager.currentIndexHndlr.inputValue=1
&actionManager.actionRcrd%5B0%5D.actionDisplayNmHndlr.inputValue=Search+Criteria
&actionManager.actionRcrd%5B0%5D.hostHndlr.inputValue=webapps2.rrc.state.tx.us%3A80
&actionManager.actionRcrd%5B0%5D.contextPathHndlr.inputValue=%2FEWA
&actionManager.actionRcrd%5B0%5D.actionHndlr.inputValue=%2FproductionQueryAction.do
&actionManager.actionRcrd%5B0%5D.actionParameterHndlr.inputValue=methodToCall
&actionManager.actionRcrd%5B0%5D.actionMethodHndlr.inputValue=unspecified
&actionManager.actionRcrd%5B0%5D.pagerParameterKeyHndlr.inputValue=
&actionManager.actionRcrd%5B0%5D.actionParametersHndlr.inputValue=
&actionManager.actionRcrd%5B0%5D.returnIndexHndlr.inputValue=0
&actionManager.actionRcrd%5B0%5D.argRcrdParameters%28searchArgs.paramValue%29=%7C1%3DCounty%7C2%3D01%7C3%3D1993%7C4%3D01%7C5%3D2013%7C8%3Dproduction%7C9%3DmonthlyTotals%7C10%3D11%7C101%3DO%7C201%3D001%7C204%3Dcounty
&actionManager.actionRcrd%5B1%5D.actionDisplayNmHndlr.inputValue=County%3A+ANDERSON
&actionManager.actionRcrd%5B1%5D.hostHndlr.inputValue=webapps2.rrc.state.tx.us%3A80
&actionManager.actionRcrd%5B1%5D.contextPathHndlr.inputValue=%2FEWA
&actionManager.actionRcrd%5B1%5D.actionHndlr.inputValue=%2FproductionQueryAction.do
&actionManager.actionRcrd%5B1%5D.actionParameterHndlr.inputValue=methodToCall
&actionManager.actionRcrd%5B1%5D.actionMethodHndlr.inputValue=search
&actionManager.actionRcrd%5B1%5D.pagerParameterKeyHndlr.inputValue=prodPager.paramValue
&actionManager.actionRcrd%5B1%5D.actionParametersHndlr.inputValue=
&actionManager.actionRcrd%5B1%5D.returnIndexHndlr.inputValue=0
&actionManager.actionRcrd%5B1%5D.argRcrdParameters%28prodPager.paramValue%29=%7C1%3D1%7C2%3D-1%7C3%3D241%7C4%3D0%7C5%3D0%7C6%3D10
&actionManager.actionRcrd%5B1%5D.argRcrdParameters%28searchArgs.paramValue%29=%7C1%3DCounty%7C2%3D01%7C3%3D1993%7C4%3D01%7C5%3D2013%7C8%3Dproduction%7C9%3DmonthlyTotals%7C10%3D11%7C101%3DO%7C201%3D001%7C204%3Dcounty
&searchArgs.startMonthArg=01
&searchArgs.startYearArg=1993
&searchArgs.endMonthArg=01
&searchArgs.endYearArg=2013
&pager.pageSize=-1
我希望只有前缀为
searchArgs
的参数才是重要的(它们包含表单的信息,如月/年/

actionManager
前缀参数包含一些复杂的数据,您需要定义它们(否则会出现错误),但我不知道它们是否实际被使用,因此您可能会将它们保留为空

执行此调用时,您将立即收到CSV文件,您可以使用任何语言(查找CSV解析库)解析该文件,并将其插入数据库或其他内容


然而,最好的方法是寻找这个源代码的替代品(或者你可以访问的公共API),因为使用它真的很疯狂,而且它可能会改变


使用PHP的示例 下面的代码是PHP中检索CSV(使用cURL)并将其解析为数组的示例

<?php

/** The data */
$minMonth = '01';
$minYear = '1993';
$maxMonth = '01';
$maxYear = '2013';
$view = 'County';
$region = 'county';
$location = '001'; /** This is the county code of ANDERSON */

$ch = curl_init();
/** URL */
curl_setopt($ch, CURLOPT_URL, "http://webapps2.rrc.state.tx.us/EWA/productionQueryAction.do");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);

/** All these form parameters */
$data = array(
    'searchArgs.orderByColumnName' => '',
    'searchArgs.initialViewArgHndlr.inputValue' => $view,
    'searchArgs.startMonthArgHndlr.inputValue' => $minMonth,
    'searchArgs.startYearArgHndlr.inputValue' => $minYear,
    'searchArgs.endMonthArgHndlr.inputValue' => $maxMonth,
    'searchArgs.endYearArgHndlr.inputValue' => $maxYear,
    'searchArgs.oilOrGasArgHndlr.inputValue' => '',
    'searchArgs.gasWellNoHndlr.inputValue' => '',
    'searchArgs.searchTypeHndlr.inputValue' => 'production',
    'searchArgs.viewTypeHndlr.inputValue' => 'monthlyTotals',
    'searchArgs.activeTabsFlagwordHndlr.inputValue' => '11',
    'searchArgs.orderByHndlr.inputValue' => '',
    'searchArgs.leaseTypeArgHndlr.inputValue' => 'O',
    'searchArgs.districtCodeArgHndlr.inputValue' => '',
    'searchArgs.leaseNumberArgHndlr.inputValue' => '',
    'searchArgs.fieldNumbersArgHndlr.inputValue' => '',
    'searchArgs.fieldNamesHndlr.inputValue' => '',
    'searchArgs.operatorNumbersArgHndlr.inputValue' => '',
    'searchArgs.operatorNamesHndlr.inputValue' => '',
    'searchArgs.onShoreCountyCodeArgHndlr.inputValue' => $location,
    'searchArgs.offShoreCountyCodeArgHndlr.inputValue' => '',
    'searchArgs.leaseNameArgHndlr.inputValue' => '',
    'searchArgs.geoRegionOptionHndlr.inputValue' => $region,
    'searchArgs.statewideFlagHndlr.inputValue' => '',
    'methodToCall' => 'generateProductionQueryReportCsv',
    'actionManager.recordCountHndlr.inputValue' => '2',
    'actionManager.currentIndexHndlr.inputValue' => '1',
    'actionManager.actionRcrd%5B0%5D.actionDisplayNmHndlr.inputValue' => 'Search+Criteria',
    'actionManager.actionRcrd%5B0%5D.hostHndlr.inputValue' => 'webapps2.rrc.state.tx.us%3A80',
    'actionManager.actionRcrd%5B0%5D.contextPathHndlr.inputValue' => '%2FEWA',
    'actionManager.actionRcrd%5B0%5D.actionHndlr.inputValue' => '%2FproductionQueryAction.do',
    'actionManager.actionRcrd%5B0%5D.actionParameterHndlr.inputValue' => 'methodToCall',
    'actionManager.actionRcrd%5B0%5D.actionMethodHndlr.inputValue' => 'unspecified',
    'actionManager.actionRcrd%5B0%5D.pagerParameterKeyHndlr.inputValue' => '',
    'actionManager.actionRcrd%5B0%5D.actionParametersHndlr.inputValue' => '',
    'actionManager.actionRcrd%5B0%5D.returnIndexHndlr.inputValue' => '0',
    'actionManager.actionRcrd%5B0%5D.argRcrdParameters%28searchArgs.paramValue%29' => '%7C1%3DCounty%7C2%3D01%7C3%3D1993%7C4%3D01%7C5%3D2013%7C8%3Dproduction%7C9%3DmonthlyTotals%7C10%3D11%7C101%3DO%7C201%3D001%7C204%3Dcounty',
    'actionManager.actionRcrd%5B1%5D.actionDisplayNmHndlr.inputValue' => 'County%3A+ANDERSON',
    'actionManager.actionRcrd%5B1%5D.hostHndlr.inputValue' => 'webapps2.rrc.state.tx.us%3A80',
    'actionManager.actionRcrd%5B1%5D.contextPathHndlr.inputValue' => '%2FEWA',
    'actionManager.actionRcrd%5B1%5D.actionHndlr.inputValue' => '%2FproductionQueryAction.do',
    'actionManager.actionRcrd%5B1%5D.actionParameterHndlr.inputValue' => 'methodToCall',
    'actionManager.actionRcrd%5B1%5D.actionMethodHndlr.inputValue' => 'search',
    'actionManager.actionRcrd%5B1%5D.pagerParameterKeyHndlr.inputValue' => 'prodPager.paramValue',
    'actionManager.actionRcrd%5B1%5D.actionParametersHndlr.inputValue' => '',
    'actionManager.actionRcrd%5B1%5D.returnIndexHndlr.inputValue' => '0',
    'actionManager.actionRcrd%5B1%5D.argRcrdParameters%28prodPager.paramValue%29' => '%7C1%3D1%7C2%3D-1%7C3%3D241%7C4%3D0%7C5%3D0%7C6%3D10',
    'actionManager.actionRcrd%5B1%5D.argRcrdParameters%28searchArgs.paramValue%29' => '%7C1%3DCounty%7C2%3D01%7C3%3D1993%7C4%3D01%7C5%3D2013%7C8%3Dproduction%7C9%3DmonthlyTotals%7C10%3D11%7C101%3DO%7C201%3D001%7C204%3Dcounty',
    'searchArgs.startMonthArg' => $minMonth,
    'searchArgs.startYearArg' => $minYear,
    'searchArgs.endMonthArg' => $maxMonth,
    'searchArgs.endYearArg' => $maxYear,
    'pager.pageSize' => '-1'
);

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);

/** Convert CSV string to array */
$data = str_getcsv($output);

/** Print array */
print_r($data);

?>


创建通过cli运行的cron作业,以获取详细信息并将其保存到excel monthlyexample of,@Anusha:感谢您的建议和链接。您认为这样的cron作业适用于javascript/dojo源代码吗?您是否尝试与网站所有者联系并要求提供公共API?另一种选择可能是通过尝试自动化-这可能很难尽管由于AJAX请求,但我查询的网站/数据库不是我自己的,我无法访问他们的服务器。cron job能否以我必须的方式查询网站并进入最终页面(),然后下载该表?老实说,我不确定。我已经从浏览器中查看了view source请求中显示的源代码,并下载了.do文件,以查看是否可以从php角度执行任何操作,但是该网站似乎是用javascript和dojo的混合体编写的,这并不是我的专长专业:(我唯一能建议的是与网站上的支持人员联系,询问他们是否能够生成自动报告?或者他们是否有一个可以用于查询网站的API。很抱歉,我不能在这方面提供更多帮助。一点问题也没有,非常感谢您努力检查,我同意感谢!我会更新标签,所以可能会有人在php和dojo方面有专业知识。现在是圣诞节,不太可能收到网站管理员的回复。这看起来很有希望,谢谢你这么做。很抱歉,这里很痛苦,但你能解释一下如何在e网站,或建议我可以了解它的地方?取决于你想用哪种语言编写它……我的意思是,我认为,将这些东西导入Excel工作表不是你应该用Dojo做的事情(除非你将Dojo与Node.js结合使用)。我想我更喜欢用php编写。正如你所说,我只需要生成一个csv文件。我可以很容易地解析它,或者我可以将它输入vba并以这种方式进行整理。但是我不知道如何执行像你在这里做的那样的网络调用。你可以使用php的cURL模块来实现这一点。例如:。
$data
数组