Попытка программно загрузить отчет publi c с веб-сайта - PullRequest
0 голосов
/ 24 марта 2020

Я бы хотел программно загружать файл 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 может вернуть ответ, загруженный локально после его завершения или, вообще, если кто-нибудь знает, как я могу сделать ежедневный запрос программным способом и, если это вообще возможно, загрузить файл.

Спасибо за чтение!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...