Как автоматизировать загрузку сгенерированных PDF-файлов - PullRequest
0 голосов
/ 24 мая 2018

Сценарий:Мы должны ежедневно вводить данные в правительственную базу данных в европейской стране.У нас внезапно возникла необходимость получить некоторые из этих данных.Но единственный формат, который они допускают, - это PDF-файлы, сгенерированные из данных - сотни из них.Мы хотели бы не сидеть перед браузером, нажимающим на ссылку после ссылки.

Сгенерированные ссылки выглядят как

<a href='javascript:viajeros("174814255")'>
  <img src="img/pdf.png">
</a>

У меня почти нет опыта работы с Javascript, поэтому я не знаюмогу ли я установить подпрограмму в виде закладки, чтобы пройти через DOM, найти все ссылки и вызвать функцию.Также, если это возможно, как это написать.

Идентификационные номера не могут быть предсказаны, поэтому я не могу написать другую страницу или скрипт curl / wget для этого.(И если бы я мог, он все равно потерпел бы неудачу, как упоминалось ниже.)

Функция 'viajeros' проста:

function viajeros(id){
  var idm = document.forms[0].idioma.value;
  window.open("parteViajeros.do?lang="+idm+"&id_fichero=" + id);
}

, но подача этого URI в curl или wget не удалась.По-видимому, они проверяют либо cookie, либо REFERER и генерируют ошибку.

Кроме того, при каждой ссылке, помещающей PDF-файл на вкладку браузера, а не в каталог загрузок, нам все равно придется сделать два щелчка (tab и сохранить).) сотни раз.

Что мне делать вместо этого?

Для чего это стоит, это на MacOS 10.13.4.Я обычно использую Safari, но у меня также есть Opera и Firefox.Я мог бы установить Chrome, но это последнее средство.Нет, это на втором месте: у нас также есть (вздрагивающий) ноутбук с Windows 10.Это последнее средство.

(Примечание: я посмотрел на четыре предложенных дубликата, которые казались многообещающими, но у каждого либо не было ответа, либо поручили запрашивающему изменить код, генерирующий PDF.)

Ответы [ 2 ]

0 голосов
/ 24 мая 2018
document.querySelectorAll("img[src=\"img/pdf.png\"]")
    .forEach((el, i) => {
      let id = el.parentElement.href.split("\"")[1];
      let url =
          "parteViajeros.do?lang=" + document.forms[0].idioma.value +
          "&id_fichero=" + id;
      setTimeout(() => {
        downloadURI(url, id);
      }, 1500 * i)
    });

При этом получаются все изображения значка PDF, а затем на их родительском объекте указывается цель ссылки.Этот href извлекает свой ID и передает его в строковую конструкцию, определяющую путь к загружаемому файлу, аналогично «viajeros», но без window.open.Этот URL затем передается в downloadURI, который выполняет загрузку.

При этом используется функция downloadURI из другого ответа переполнения стека .Вы можете скачать URL, установив атрибут загрузки в ссылке, затем щелкнув по нему, что реализовано следующим образом.Это проверено только в Chrome.

function downloadURI(uri, name) {
  var link = document.createElement("a");
  link.download = name;
  link.href = uri;
  document.body.appendChild(link);
  link.click();
  document.body.removeChild(link);
  delete link;
}

Откройте страницу со ссылками и откройте консоль.Сначала вставьте функцию downloadURI, а затем приведенный выше код, чтобы загрузить все ссылки.

0 голосов
/ 24 мая 2018

У меня была похожая ситуация, когда я должен был загрузить все PDF-файлы (счета-фактуры), которые были сгенерированы за день или на прошлой неделе.

Так что после некоторого исследования я смог выполнить очистку, используя PhantomJS и позже я обнаружил casperjs , который облегчил мою работу.

phantomJs и casperjs - это браузеры без головы.

Поскольку у вас меньше опыта работы с JS, и если вы парень на C #, тогда вам может помочь CefSharp .

Некоторые полезные ссылки:

Чтобы начать работу с фантомом, каспером и cefSharp

PhantomJs

CasperJs

CefSharp

Попробуйте прочитать документацию для скачивания файлов.

...