您至少需要 2 个请求
1. GET请求:获取需要的cookies
2. POST 请求:更改时间跨度/
-> 解析响应/下载 excel
1 - 初始获取请求 [set_cookie]
获取 /symbol/aapl/历史 HTTP/1.1
主办方:www.nasdaq.com
缓存控制:无缓存
测试
<pre></pre>
pm.test("valid response", function () {
pm.response.to.have.status(200);
pm.response.to.be.withBody;
pm.expect(pm.response.text()).to.include("Results for: ");
});
只有下载excel时才需要以下内容
<pre></pre>
// ... continue test code ...
var input = pm.response.text();
var regex = /"__VIEWSTATE" value="(.*?)"/;
var match = regex.exec(input);
if (match) pm.globals.set("__VIEWSTATE", match[1]);
var regex = /"__VIEWSTATEGENERATOR" value="(.*?)"/;
var match = regex.exec(input);
if (match) pm.globals.set("__VIEWSTATEGENERATOR", match[1]);
var regex = /"__VIEWSTATEENCRYPTED" value="(.*?)"/;
var match = regex.exec(input);
if (match) pm.globals.set("__VIEWSTATEENCRYPTED", match[1]);
var regex = /"__EVENTVALIDATION" value="(.*?)"/;
var match = regex.exec(input);
if (match) pm.globals.set("__EVENTVALIDATION", match[1]);
//-----
var regex = /<option value="(\d+[dmy])">10 Years<\/option>/;
var match = regex.exec(input);
if (match) var timeframe = match[1];
pm.globals.set("timeframe", timeframe);
//-----
var regex = /var quoteBoxSelectedSymbol="(.*?)";/;
var match = regex.exec(input);
if (match) var symbol = match[1];
pm.globals.set("symbol", symbol);
//-----
var submitNoDownload = timeframe + "|false|" + symbol;
pm.globals.set("submitNoDownload", submitNoDownload);
var submitToDownload = timeframe + "|true|" + symbol;
pm.globals.set("submitToDownload", submitToDownload);
2 - 直接从页面获取数据;没有下载
POST /symbol/aapl/历史 HTTP/1.1
主办方:www.nasdaq.com
x-requested-with: XMLHttpRequest
内容类型:应用程序/json
接受: */*
缓存控制:无缓存
{{submitNoDownload}}
测试
<pre></pre>
pm.test("valid response", function () {
pm.response.to.have.status(200);
pm.response.to.be.withBody;
pm.expect(pm.response.text()).to.include("Results for: ");
});
var input = pm.response.text();
var regex = /<tr>\s+(?:<td>\s+(\S+)\s+<\/td>\s+)(?:<td>\s+(\S+)\s+<\/td>\s+)(?:<td>\s+(\S+)\s+<\/td>\s+)(?:<td>\s+(\S+)\s+<\/td>\s+)(?:<td>\s+(\S+)\s+<\/td>\s+)(?:<td>\s+(\S+)\s+<\/td>\s+)<\/tr>/mg;
var match = regex.exec(input);
while (match != null) {
// Iterate thru all rows/data
pm.globals.set("date", match[1]);
pm.globals.set("open", match[2]);
pm.globals.set("high", match[3]);
pm.globals.set("low", match[4]);
pm.globals.set("close-last", match[5]);
pm.globals.set("volume", match[6]);
match = regex.exec(input);
}
3 - 下载excel
首要任务!我们这里有什么..
<pre></pre>
var data = $("[id$='ddlTimeFrame']").val();
var submitString = data + '|' + download + "|" + quoteBoxSelectedSymbol;
- $(...) = (jquery) 当前文档
- [id$='ddlTimeFrame'] = 选择/返回一个 id = "ddlTimeFrame" 的 html 元素(见下文)
- .val() = 获取选中的html元素的值
上面的代码会选择下面的html代码
<pre></pre>
<select id="ddlTimeFrame" name="ddlTimeFrame" onchange="getQuotes(false)">
<option value="5d">5 Days</option>
<option value="1m">1 Month</option>
<option value="3m" selected="selected">3 Months</option>
<option value="6m">6 Months</option>
<option value="1y">1 Year</option>
<option value="18m">18 Months</option>
<option value="2y">2 Years</option>
<option value="3y">3 Years</option>
<option value="4y">4 Years</option>
<option value="5y">5 Years</option>
<option value="6y">6 Years</option>
<option value="7y">7 Years</option>
<option value="8y">8 Years</option>
<option value="9y">9 Years</option>
<option value="10y">10 Years</option>
</select>
html 代码中的某处
<pre></pre>
var quoteBoxSelectedSymbol="AAPL";
- 数据 = 10 年
- 下载 = 真
quoteBoxSelectedSymbol = AAPL
submitString = 10y|true|AAPL
POST /symbol/aapl/历史 HTTP/1.1
主办方:www.nasdaq.com
x-requested-with: XMLHttpRequest
内容类型:application/x-www-form-urlencoded
接受:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
缓存控制:无缓存
__VIEWSTATE:{{__VIEWSTATE}}
__VIEWSTATEGENERATOR:{{__VIEWSTATEGENERATOR}}
__VIEWSTATEENCRYPTED:{{__VIEWSTATEENCRYPTED}}
__EVENTVALIDATION:{{__EVENTVALIDATION}}
ctl00$quotes_content_left$submitString:{{submitToDownload}}