Я бы хотел программно загружать файл c csv publi с сайта в локальную папку на ежедневной основе. Вот сайт https://gats.pjm-eis.com/gats2/PublicReports/RenewableGeneratorsRegisteredinGATS, и я хочу сделать то же самое, что нажать кнопку CSV в левом верхнем углу. Операция довольно длинная и занимает около 2-3 минут, чтобы загрузить CSV-файл из 200К записей.
Изначально я использовал вкладку сети chrome для инструментов разработчика и скопировал запрос как команду curl и настроить ежедневную работу, чтобы сделать тот же запрос. Однако с тех пор я обнаружил, что команда curl меняется каждый день, поскольку в ней есть поле заголовка с куком ie, которое обновляется произвольным образом (по крайней мере, с моей точки зрения). Затем я начал изучать код js на внешнем интерфейсе и обнаружил что-то похожее на приведенное ниже, где выполнение RequestExport ('CSV', '') в консоли загружает файл.
function ExportClick(s, e, tabNumber, sameWindow)
{
$("#tabNumber").val(tabNumber);
var exportType = s.name.substr(0, 3).toUpperCase();
$("#exportType" + tabNumber).val(exportType);
var frmExportTo = document.getElementById("frmExportTo" + tabNumber);
// If we're printing, we want to open up a new window and show the (PDF) contents there
// by setting the "target" to "_blank". If we're downloading a file, we can stay
// in the same window, since the browser will handle it.
if (exportType == "PRN" && !sameWindow)
{
frmExportTo.setAttribute("target", "_blank");
}
else
{
frmExportTo.removeAttribute("target");
}
frmExportTo.submit();
s.SetChecked(false); // reset the button so we can click on it again for some reason (GATS-1552)
}
function RequestExport(exportType, tabNumber)
{
$("#exportType").val(exportType);
$("#tabNumber").val(tabNumber);
var frmExportTo = document.getElementById("frmExportTo" + tabNumber);
// If we're printing, we want to open up a new window and show the (PDF) contents there
// by setting the "target" to "_blank". If we're downloading a file, we can stay
// in the same window, since the browser will handle it.
if (exportType == "PRN") {
frmExportTo.setAttribute("target", "_blank");
} else {
frmExportTo.removeAttribute("target");
}
frmExportTo.submit();
}
Моя следующая идея должен был использовать безголовый браузер, такой как кукловод, чтобы симулировать переход на страницу и либо нажать кнопку CSV, либо выполнить функцию RequestExport, указанную выше, и отправить форму, которой принадлежит кнопка CSV. Проблема в том, что я не понимаю, как получить результат вызова функции. Кажется, ничего не вернуть. Мне неясно, как файл загружается после отправки формы. Может быть, это даже невозможно выяснить, не увидев бэкэнд-код.
Я хотел бы знать, есть ли у кого-нибудь идеи о том, как сделанный запрос POST может вернуть ответ, загруженный локально после его завершения или, вообще, если кто-нибудь знает, как я могу сделать ежедневный запрос программным способом и, если это вообще возможно, загрузить файл.
Спасибо за чтение!