Запрашивает загрузку файла с загрузкой javascript по щелчку мыши?

#javascript #python #python-requests

Вопрос:

Я хочу загрузить файл со следующего URL-адреса:

 url = "https://www.nseindia.com/companies-listing/corporate-filings-actions"

# Download(.csv) is the element I have to click.

# the following code doesn't work.
header = {
        'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:65.0) Gecko/20100101 Firefox/65.0',
        "X-Requested-With": "XMLHttpRequest"
    }
    r = requests.get(url, stream=True, timeout=20, headers=header)
    with open("/home/pms/corp_action", 'wb') as fd:
        for chunk in r.iter_content(chunk_size=chunk_size):
            fd.write(chunk)
 
 # The element on inspection

<a id="CFcorpactionsEquity-download" data-url="" href="javascript:downloadCSV('CFcorpactionsEquity-download')"><img src="/assets/images/icon-xls.svg" alt=""> Download (.csv)</a>
 

Я пытаюсь выяснить, как загрузить файл с помощью запросов, и мне очень интересно изучить процесс, чтобы определить правильные params или другие вещи, необходимые для этого.

Комментарии:

1. Что именно вы подразумеваете под «не работает»? Вы получаете сообщение об ошибке, ничего не происходит, в файле неверный вывод?

2. @mousetail Я получаю файл, в котором есть head и body в основном написано: Ресурс не найден.

3. Пожалуйста, постарайтесь воздержаться от добавления «TIA» и других болтливых материалов в свои посты.

4. Иногда я даю следующий совет: Обратите внимание, что здесь мы предпочитаем технический стиль письма. Мы мягко препятствуем приветствиям, надеемся, что вы можете помочь, спасибо, заранее благодарим, благодарственные письма, пожелания, добрые пожелания, подписи, пожалуйста, помогите, болтливые материалы и сокращенные txtspk, мольбы, как долго вы застряли, советы по голосованию, мета-комментарии и т. Д. Просто объясните свою проблему и покажите, что вы пробовали, чего ожидали и что на самом деле произошло.

Ответ №1:

Проблема может быть не в том, что вы думаете. Обычно, когда вы используете href в a теге, это URL-ссылка, подобная той, которую вы предоставили. В данном случае это функция вызова Java-скрипта под названием downloadCSV. Вы можете найти эту функцию здесь: corporate-filings.js — он начинается в линбе 4710:

 function downloadCSV(id) {
  try {
    var csvUrl = void 0;
    if ($("#"   id).data("url") !== "") {
      csvUrl = $("#"   id).data("url")   "amp;csv=true";
    } else {
      csvUrl = "/api/"   activeApiName   (activeApiName.includes("?") ? "amp;" : "?")   "index="   innerActiveTab   "amp;csv=true";
    }
    window.open(csvUrl, "_blank");
  } catch (e) {
    console.log("downloadCSV", e.message);
  }
}
 

Он использует внешние переменные, например activeApiName , для объединения URL-адреса, на который он перенаправляет пользователя на новой странице, используя window.open(csvUrl, "_blank");

Но есть также более простой способ оценить, откуда взялся файл. Я просто загрузил его и проверил URL, с которого он пришел. Это https://www.nseindia.com/api/corporates-corporateActions?index=equitiesamp;csv=true . Для реализации на python я предлагаю вам в основном скопировать и вставить это решение и заменить URL-адрес. Единственная проблема может заключаться в том, что владельцы веб-сайта могут изменить способ работы функции downloadCSV или ее значение activeApiName , и вам придется снова очистить ее.

Комментарии:

1. Спасибо за подробный ответ. Я попробовал решение по ссылке, я все равно получаю тот же файл, то есть файл, который есть Resource not found . Использовал api URL-адрес. Как проще всего оценить, откуда взялся файл?

2. К твоему сведению, это царапина , а не лом.