所以我一直在尝试使用Delphi中的Indy Project(Internet Direct)从网站获取我需要的数据。我已设法使用GET和POST方法登录,获取登录后需要附加到所有URL的唯一会话ID(EPASS_Nonce_ID),现在我正在尝试提取数据。我认为该页面使用的是JSON,但我之前没有使用过它。
我能够使用GET方法获取源代码,但它没有内容(我想要的内容)。我认为这是因为JSON脚本必须运行才能加载数据,而我的简单GET方法不会调用它。
似乎有一个脚本在后台运行以获取用于填充网站表格的CSV数据。 JSON似乎向服务器提供请求,并在等待时在UI上显示“处理”。一旦有响应,它似乎将UI更改为“我的交易历史记录”并显示数据。
虽然我可以使用GET来获取网站,但我需要协助启动JSON脚本(或我需要做的任何事情)以获取CSV数据。
HTML JSON脚本:
<script type="application/json" id="jsparams">{"loadAction":"/website/transaction_history2/_md_transaction_history2_r1_content/view/_ac_transaction_history2_r1_content/AC/_pid
/transaction_history2_r1_content/_st_transaction_history2_r1_content/normal?action\u003dloadAction\u0026EPASS_NONCE_ID\u003dE20F7163FA571F7FB19FD92F1AE997A6","lastLogin"
:1513917404587,"lastLoginDateFormat":"E NNN d yyyy, HH:mm (Ti\\m\\e Zon\\e z G\\MT)","externalPageUrl":"/website/external_page.jsp?EPASS_NONCE_ID\u003dE20F7163FA571F7FB19FD92F1AE997A6\u0026link\
u003d","contextPath":"/comsuper_mil","windowTitle":"My Transaction History","csvAction":"/website/transaction_history2/_md_transaction_history2_r1_content/view/_ac_transaction_history2_r1_content/AC/_pid/transaction_history2_r1_content/
_st_transaction_history2_r1_content/normal?action\u003dcsvAction\u0026EPASS_NONCE_ID\u003dE20F7163FA571F7FB19FD92F1AE997A6"}</script>
以下是我从网站上使用的Get或Post方法收到的整个回复:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" >
<head>
<title>ePASS</title>
<meta name="keywords" content="ePASS" />
<meta name="description" content="ePASS Member Module" />
<meta name="author" content="Bravura Solutions Limited" />
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<!-- IE should be as standards compatible as possible -->
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<link rel="stylesheet" media="screen" type="text/css" title="standard" href="/super_mil/common/stylesheets/core.css"/>
<link rel="stylesheet" media="screen" type="text/css" title="standard" href="/super_mil/common/stylesheets/bpay.css"/>
<link rel="stylesheet" media="screen" type="text/css" title="standard" href="/super_mil/common/stylesheets/global.css"/>
<link rel="stylesheet" media="print" type="text/css" title="standard" href="/super_mil/common/stylesheets/print.css"/>
<link rel="stylesheet" media="screen" type="text/css" title="standard" href="/super_mil/member/jepass.css"/>
<link rel="stylesheet" media="screen" type="text/css" title="standard" href="/super_mil/member/msbs/jepass.css"/>
<link rel="stylesheet" media="print" type="text/css" title="standard" href="/super_mil/member/msbs/print.css"/>
<script type="text/javascript" src="/super_mil/common/javascript/jquery.min.js"></script>
<!-- jquery ui-->
<link type="text/css" href="/super_mil/common/javascript/jquery/themes/base/jquery.ui.all.css" rel="Stylesheet" />
<script type="text/javascript" src="/super_mil/common/javascript/jquery/js/jquery-ui.min.js"></script>
<script type="text/javascript" src="/super_mil/common/javascript/global.js"></script>
<script type="text/javascript" src="/super_mil/common/javascript/client.js"></script>
<script type="text/javascript" src="/super_mil/common/javascript/multi_select.js"></script>
<script type="text/javascript" src="/super_mil/common/javascript/block_iframe.js"></script>
<script type="text/javascript" src="/super_mil/common/javascript/jquery /js/jquery-ui.min.js"></script>
<link rel="stylesheet" href="/super_mil/common/javascript/jquery/themes/base/jquery.ui.all.css">
<script type="text/javascript" src="/super_mil/common/javascript/datepicker.js"></script>
</head>
<body class="with-menu">
<div id="t-wrapper">
<!-- BEGIN Portlet -->
<div id="page-wrapper">
<div id="t-logo">
<div id="t-sitelogo" ></div>
<!-- Note: template.header -->
<div id="l-template-header" class="header-note">
<div id="top-spacer"> <div id="header_topstrip">
<a shape="rect" class="topstrip_link" target="_ext" href="http://website/contact"><img src="/super_mil/common/images/contact_us.png" /></a>
</div> </div>
<div id="scheme_block"> <div id="scheme_img">
<a shape="rect" class="topstrip_link" target="_ext" href="http://website"><img src="/super_mil/common/images/MSBS_scheme_block.png" /></a>
</div> </div>
<div id='menu_header'>Member Services</div>
</div>
<div id="t-sitelogo-right" ></div>
</div>
<!-- END Portlet --><!-- BEGIN Portlet -->
<div id="t-info">
<p class="info-text">
<script type="text/javascript" src="/super_mil/common/javascript/set_last_login_date.js"></script>
<span id="greeting_message">Good Afternoon</span> <span id="name">Person Name</span> <strong>Your Account Number is: <span id="text_2" class="readonly text">Account</span> (<span id="text_8" class="readonly text">Contributor</span>)</strong>
</p>
</div>
<!-- END Portlet --><!-- BEGIN Portlet -->
<div class="main-content">
<div class="middle-bit">
<!-- END Portlet --><!-- BEGIN Portlet -->
<script type="text/javascript" src="/super_mil/common/javascript/external_page.js"></script>
<div id="tool-menu">
<ul>
<li><a id="tool_print" href="javascript:print()" target="_self" tabindex="1">Print</a></li>
<li><a id="tool_contact" href="/super_mil/members/contact?EPASS_NONCE_ID=DA9CA80B99F7101EF6A2CD0B56245FEF" target="_self" tabindex="2">Contact Us</a></li>
<li><a id="tool_logout" href="/super_mil/members/transaction_history2/_ps_transaction_history2_r1_content/normal/_ac_transaction_history2_r1_menu/AC/_rp_transaction_history2_r1_content_transaction0x1type0x1filter/1_All/_rp_transaction_history2_r1_content_loadonchange/1_false/_md_transaction_history2_r1_content/view/_pm_transaction_history2_r1_content/view/_pid/transaction_history2_r1_menu/_rp_transaction_history2_r1_content_action/1_loadAction/_rp_transaction_history2_r1_content_date0x1filter/1_10x370x32017/_st_transaction_history2_r1_content/normal?action=logout&EPASS_NONCE_ID=DA9CA80B99F7101EF6A2CD0B56245FEF" target="_self" tabindex="3">Log Off</a></li>
</ul>
</div>
<div id="t-mainmenu">
<ul class="top-menu">
<li class="menu-item menu-selected "><a class="menu-selected " href="/super_mil/members/transaction_history2/_ps_transaction_history2_r1_content/normal/_ac_transaction_history2_r1_menu/AC/_rp_transaction_history2_r1_content_transaction0x1type0x1filter/1_All/_rp_transaction_history2_r1_content_loadonchange/1_false/_md_transaction_history2_r1_content/view/_pm_transaction_history2_r1_content/view/_pid/transaction_history2_r1_menu/_rp_transaction_history2_r1_content_action/1_loadAction/_rp_transaction_history2_r1_content_date0x1filter/1_10x370x32017/_st_transaction_history2_r1_content/normal?action=menu&menu_id=1&EPASS_NONCE_ID=DA9CA80B99F7101EF6A2CD0B56245FEF&expand=maintenance" target="_self" >My Details</a>
</li>
<li class="menu-item "><a href="/super_mil/members/transaction_history2/_ps_transaction_history2_r1_content/normal/_ac_transaction_history2_r1_menu/AC/_rp_transaction_history2_r1_content_transaction0x1type0x1filter/1_All/_rp_transaction_history2_r1_content_loadonchange/1_false/_md_transaction_history2_r1_content/view/_pm_transaction_history2_r1_content/view/_pid/transaction_history2_r1_menu/_rp_transaction_history2_r1_content_action/1_loadAction/_rp_transaction_history2_r1_content_date0x1filter/1_10x370x32017/_st_transaction_history2_r1_content/normal?action=menu&menu_id=222&EPASS_NONCE_ID=DA9CA80B99F7101EF6A2CD0B56245FEF&expand=transaction_history2" class="" target="_self" >My Transaction History</a>
</li>
<li class="menu-item has-sub-menu"><a href="/super_mil/members/transaction_history2/_ps_transaction_history2_r1_content/normal/_ac_transaction_history2_r1_menu/AC/_rp_transaction_history2_r1_content_transaction0x1type0x1filter/1_All/_rp_transaction_history2_r1_content_loadonchange/1_false/_md_transaction_history2_r1_content/view/_pm_transaction_history2_r1_content/view/_pid/transaction_history2_r1_menu/_rp_transaction_history2_r1_content_action/1_loadAction/_rp_transaction_history2_r1_content_date0x1filter/1_10x370x32017/_st_transaction_history2_r1_content/normal?action=menu&menu_id=107&EPASS_NONCE_ID=DA9CA80B99F7101EF6A2CD0B56245FEF&expand=investment_change_2" class="" target="_self" >My Investments</a>
<ul class="sub-menu inactive">
<li class="sub-menu-item"><a href="/super_mil/members/transaction_history2/_ps_transaction_history2_r1_content/normal/_ac_transaction_history2_r1_menu/AC/_rp_transaction_history2_r1_content_transaction0x1type0x1filter/1_All/_rp_transaction_history2_r1_content_loadonchange/1_false/_md_transaction_history2_r1_content/view/_pm_transaction_history2_r1_content/view/_pid/transaction_history2_r1_menu/_rp_transaction_history2_r1_content_action/1_loadAction/_rp_transaction_history2_r1_content_date0x1filter/1_10x370x32017/_st_transaction_history2_r1_content/normal?action=menu&menu_id=1001&EPASS_NONCE_ID=DA9CA80B99F7101EF6A2CD0B56245FEF&expand=investment_change_2_sub_menu" class="" >View / Switch My Investment Details</a></li>
</ul>
</li>
<li class="menu-item "><a href="/super_mil/members/transaction_history2/_ps_transaction_history2_r1_content/normal/_ac_transaction_history2_r1_menu/AC/_rp_transaction_history2_r1_content_transaction0x1type0x1filter/1_All/_rp_transaction_history2_r1_content_loadonchange/1_false/_md_transaction_history2_r1_content/view/_pm_transaction_history2_r1_content/view/_pid/transaction_history2_r1_menu/_rp_transaction_history2_r1_content_action/1_loadAction/_rp_transaction_history2_r1_content_date0x1filter/1_10x370x32017/_st_transaction_history2_r1_content/normal?action=menu&menu_id=17&EPASS_NONCE_ID=DA9CA80B99F7101EF6A2CD0B56245FEF&expand=client_page3" class="" target="_self" >My Statements</a>
</li>
<li class="menu-item "><a href="/super_mil/members/transaction_history2/_ps_transaction_history2_r1_content/normal/_ac_transaction_history2_r1_menu/AC/_rp_transaction_history2_r1_content_transaction0x1type0x1filter/1_All/_rp_transaction_history2_r1_content_loadonchange/1_false/_md_transaction_history2_r1_content/view/_pm_transaction_history2_r1_content/view/_pid/transaction_history2_r1_menu/_rp_transaction_history2_r1_content_action/1_loadAction/_rp_transaction_history2_r1_content_date0x1filter/1_10x370x32017/_st_transaction_history2_r1_content/normal?action=menu&menu_id=19&EPASS_NONCE_ID=DA9CA80B99F7101EF6A2CD0B56245FEF&expand=client_page5" class="" target="_self" >Reported Values and Caps</a>
</li>
<li class="menu-item "><a href="/super_mil/members/transaction_history2/_ps_transaction_history2_r1_content/normal/_ac_transaction_history2_r1_menu/AC/_rp_transaction_history2_r1_content_transaction0x1type0x1filter/1_All/_rp_transaction_history2_r1_content_loadonchange/1_false/_md_transaction_history2_r1_content/view/_pm_transaction_history2_r1_content/view/_pid/transaction_history2_r1_menu/_rp_transaction_history2_r1_content_action/1_loadAction/_rp_transaction_history2_r1_content_date0x1filter/1_10x370x32017/_st_transaction_history2_r1_content/normal?action=menu&menu_id=16&EPASS_NONCE_ID=DA9CA80B99F7101EF6A2CD0B56245FEF&expand=client_page2" class="" target="_self" >i-Estimator</a>
</li>
<li class="menu-item "><a href="/super_mil/members/transaction_history2/_ps_transaction_history2_r1_content/normal/_ac_transaction_history2_r1_menu/AC/_rp_transaction_history2_r1_content_transaction0x1type0x1filter/1_All/_rp_transaction_history2_r1_content_loadonchange/1_false/_md_transaction_history2_r1_content/view/_pm_transaction_history2_r1_content/view/_pid/transaction_history2_r1_menu/_rp_transaction_history2_r1_content_action/1_loadAction/_rp_transaction_history2_r1_content_date0x1filter/1_10x370x32017/_st_transaction_history2_r1_content/normal?action=menu&menu_id=9&EPASS_NONCE_ID=DA9CA80B99F7101EF6A2CD0B56245FEF&expand=contact" class="" target="_self" >Contact Us</a>
</li>
<li class="menu-item "><a href="/super_mil/members/transaction_history2/_ps_transaction_history2_r1_content/normal/_ac_transaction_history2_r1_menu/AC/_rp_transaction_history2_r1_content_transaction0x1type0x1filter/1_All/_rp_transaction_history2_r1_content_loadonchange/1_false/_md_transaction_history2_r1_content/view/_pm_transaction_history2_r1_content/view/_pid/transaction_history2_r1_menu/_rp_transaction_history2_r1_content_action/1_loadAction/_rp_transaction_history2_r1_content_date0x1filter/1_10x370x32017/_st_transaction_history2_r1_content/normal?action=menu&menu_id=15&EPASS_NONCE_ID=DA9CA80B99F7101EF6A2CD0B56245FEF&expand=client_page1" class="" target="_self" >My Forms</a>
</li>
<li class="menu-item "><a href="/super_mil/members/transaction_history2/_ps_transaction_history2_r1_content/normal/_ac_transaction_history2_r1_menu/AC/_rp_transaction_history2_r1_content_transaction0x1type0x1filter/1_All/_rp_transaction_history2_r1_content_loadonchange/1_false/_md_transaction_history2_r1_content/view/_pm_transaction_history2_r1_content/view/_pid/transaction_history2_r1_menu/_rp_transaction_history2_r1_content_action/1_loadAction/_rp_transaction_history2_r1_content_date0x1filter/1_10x370x32017/_st_transaction_history2_r1_content/normal?action=logout&EPASS_NONCE_ID=DA9CA80B99F7101EF6A2CD0B56245FEF&expand=logoff" class="" target="_self" >Log Off</a>
</li>
</ul>
</div>
<!-- END Portlet --><!-- BEGIN Portlet -->
<script type="text/javascript">
top.document.title = 'Window Title';
</script>
<title>Window Title</title>
<script type="text/javascript" src="/super_mil/common/javascript/monitor_f.js"> </script>
<script type="text/javascript" src="/super_mil/common/javascript/set_window_title.js"></script>
<div id="l-main" class="l-monitor">
<div id="l-monitor">
<div id="print-logo" class="print-only">
<img src="/super_mil/member/epass/images/print_logo.gif" alt="null" />
</div>
<div id="l-title">
<h1 class="title-text">My Transaction History</h1>
</div>
<!-- Note: monitor.header -->
<div id="l-header" class="header-note">
</div>
<div id="l-monitor">
<div id="l-actionarea">
<br />
<div id="l-message">
<span class="message">Processing<span>
</div>
<br />
<table class="results-table" >
<tr class="even row-1">
<td class="item column_null"> </td>
<td class="item column_null"><img id="status_0" src="/super_mil/member/epass/icons/progress_in_progress.gif" /></td>
</tr>
</table>
</div>
<div id="summary"></div>
<br /><br />
<div id="l-error">
<ul>
<li><span id="error" >An error occurred trying to process your request.</span></li>
</ul>
</div>
<div class="buttons">
<span class="button-span hidden_button" ><a id="ok_button" class="hidden_button" href="/super_mil/?EPASS_NONCE_ID=DA9CA80B99F7101EF6A2CD0B56245FEF" target="_self" tabindex="1"><span>OK</span></a></span>
<span class="button-span hidden_button" ><a id="yes_button" class="hidden_button" href="/super_mil/?EPASS_NONCE_ID=DA9CA80B99F7101EF6A2CD0B56245FEF" target="_self" tabindex="2"><span>Yes</span></a></span>
<span class="button-span hidden_button" ><a id="no_button" class="hidden_button" href="/super_mil/?EPASS_NONCE_ID=DA9CA80B99F7101EF6A2CD0B56245FEF" target="_self" tabindex="3"><span>No</span></a></span>
<span class="button-span hidden_button" ><a id="cancel_button" class="hidden_button" href="/super_mil/?EPASS_NONCE_ID=DA9CA80B99F7101EF6A2CD0B56245FEF" target="_self" tabindex="4"><span>Cancel</span></a></span>
<span class="button-span hidden_button" ><a id="download_button" class="hidden_button" href="/super_mil/?EPASS_NONCE_ID=DA9CA80B99F7101EF6A2CD0B56245FEF" target="_self" tabindex="5"><span>Download</span></a></span>
</div>
</div>
<!-- Note: monitor.footer -->
<div id="l-footer" class="footer-note">
</div>
</div>
<div class="min-height-clear"></div>
<!-- main-content-middle -->
</div> <!-- end of l-main div -->
<!-- END Portlet --><!-- BEGIN Portlet -->
<!-- END Portlet --><!-- BEGIN Portlet -->
<!-- main-content-footer -->
<div class="min-height-clear"></div>
</div><!-- end middle-bit -->
</div><!-- end main-content -->
</div><!-- end page-wrapper -->
<div id="table-footer">
<div id="footer">
<!-- Note: template.footer -->
<div id="l-template-footer" class="footer-note">
<div class="footer"> <div id="footer-middle"> <p>
<a shape="rect" class="topstrip_link" target="_ext" href="http://website/privacy">Privacy Policy</a> |
<a shape="rect" class="topstrip_link" target="_ext" href="http://website/disclaimer">Disclaimer</a>
</p>
</div> <div id="footer-bottom">
<b> Superannuation Company (SC)</b> Business Numbers <br />Trustee of the Superannuation and Benefits Scheme </div></div>
</div>
</div>
</div>
<!-- END Portlet --><script type="text/javascript" src="/super_mil/common/javascript/set_first_focus.js"></script>
</div>
<script type="application/json" id="jsparams">{"pollerUrl":"/super_mil/poller?EPASS_NONCE_ID\u003dDA9CA80B99F7101EF6A2CD0B56245FEF","lastLogin":1514254869743,"lastLoginDateFormat":"E NNN d yyyy, HH:mm (Ti\\m\\e Zon\\e z G\\MT)","externalPageUrl":"/super_mil/member/external_page.jsp?EPASS_NONCE_ID\u003dDA9CA80B99F7101EF6A2CD0B56245FEF\u0026link\u003d","resourcePath":"/super_mil/member/epass/","contextPath":"/super_mil","windowTitle":"Processing","actionName":"monitoredAction.au.com.essential.epass.member.portlet.TransactionHistory2Portlet.1731515MSBS"}</script>
</body>
</html>
并且使用Fiddler,似乎有3个单独的GET请求使用/返回JSON数据。
首先是:
actionName=monitoredAction.au.com.essential.epass.member.portlet.TransactionHistory2Portlet.1731515MSBS
contextPath=/comsuper_mil
externalPageUrl=/super_mil/member/external_page.jsp?EPASS_NONCE_ID=8E4F382666E719688D23B72BBD40D71E&link=
lastLogin=1514254720197
lastLoginDateFormat=E NNN d yyyy, HH:mm (Ti\m\e Zon\e z G\MT)
pollerUrl=/super_mil/poller?EPASS_NONCE_ID=8E4F382666E719688D23B72BBD40D71E
resourcePath=/super_mil/member/epass/
windowTitle=Processing
然后第二个是:
choices
{}
choice=AUTO
url=/super_mil/members/transaction_history2/_ac_transaction_history2_r1_content/AC/_pid/transaction_history2_r1_content?action=progressCompletedAction&EPASS_NONCE_ID=8E4F382666E719688D23B72BBD40D71E
stagesCompleted=0
然后最后一个是:
contextPath=/super_mil
csvAction=/super_mil/members/transaction_history2/_md_transaction_history2_r1_content/view/_ac_transaction_history2_r1_content/AC/_pid/transaction_history2_r1_content/_st_transaction_history2_r1_content/normal?action=csvAction&EPASS_NONCE_ID=8E4F382666E719688D23B72BBD40D71E
externalPageUrl=/super_mil/member/external_page.jsp?EPASS_NONCE_ID=8E4F382666E719688D23B72BBD40D71E&link=
lastLogin=1514254720197
lastLoginDateFormat=E NNN d yyyy, HH:mm (Ti\m\e Zon\e z G\MT)
loadAction=/super_mil/members/transaction_history2/_md_transaction_history2_r1_content/view/_ac_transaction_history2_r1_content/AC/_pid/transaction_history2_r1_content/_st_transaction_history2_r1_content/normal?action=loadAction&EPASS_NONCE_ID=8E4F382666E719688D23B72BBD40D71E
windowTitle=My Transaction History
事实证明......我发现了一个非常简单的答案,我没有想到要尝试。
我尝试从中下载CSV数据的页面,使用Java Script查询将当前年份的数据自动加载到页面上,然后返回服务器。虽然我无法弄清楚如何解码该查询,或模拟它...我注意到我可以改变我正在看的那一年。我使用Fiddler再次捕获数据包,这次更改为上一个财政年度,然后回到当前年份(加载后)。这为服务器生成了离散的POST方法,我很容易复制,使用:
Params2 := TStringList.Create;
Params2.Add('loadonchange=false');
Params2.Add('transaction_type_filter=All');
Params2.Add('date_filter=1/7/' + IntToStr(Last_S_Year));
Response := idhttp.Post(website + '/members/transaction_history2' + '/_md_transaction_history2_r1_content/view/' + '_ac_transaction_history2_r1_content/AC/_ps_transaction_history2_r1_content/normal/_pm_transaction_history2_r1_content/view/_pid/transaction_history2_r1_content/_st_transaction_history2_r1_content/normal?action=csvAction&' + EPASS,Params2);
此代码导致我在Response字符串中获取了确切的CSV数据。
我知道这并没有严格回答我的问题......但是它可能会找到一种方法来找到一种独特的方法来获取您试图从您的网站获得的Post或Get方法。