вам понадобится как минимум 2 запроса
1. GET request: to get the required cookies
2. POST request: to change timespan/
-> parse response / downlaod excel
1 - начальный запрос на получение [set_cookie]
GET /symbol/aapl/historical HTTP/1.1
Host: www.nasdaq.com
cache-control: no-cache
Тесты
<pre></p>
<pre><code>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></p>
<pre><code>// ... 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/historical HTTP/1.1
Host: www.nasdaq.com
x-requested-with: XMLHttpRequest
content-type: application/json
accept: */*
cache-control: no-cache
{{submitNoDownload}}
Тесты
<pre></p>
<pre><code>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></p>
<pre><code>var data = $("[id$='ddlTimeFrame']").val();
var submitString = data + '|' + download + "|" + quoteBoxSelectedSymbol;
- $ (...) = (jquery) текущий документ
- [id $ = 'ddlTimeFrame'] = выбрать / вернуть html-элемент с id = "ddlTimeFrame" (см. Ниже)
- .val () = получить значение выбранного HTML-элемента
Приведенный выше код выберет следующий HTML-код
<pre></p>
<pre><code><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></p>
<pre><code>var quoteBoxSelectedSymbol="AAPL";
- данные = 10лет
- download = true
quoteBoxSelectedSymbol = AAPL
submitString = 10y | true | AAPL
POST /symbol/aapl/historical HTTP/1.1
Host: www.nasdaq.com
x-requested-with: XMLHttpRequest
Content-Type: application/x-www-form-urlencoded
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
cache-control: no-cache
__VIEWSTATE:{{__VIEWSTATE}}
__VIEWSTATEGENERATOR:{{__VIEWSTATEGENERATOR}}
__VIEWSTATEENCRYPTED:{{__VIEWSTATEENCRYPTED}}
__EVENTVALIDATION:{{__EVENTVALIDATION}}
ctl00$quotes_content_left$submitString:{{submitToDownload}}