Как загружать файлы через Apify

#jquery #file #google-chrome-devtools #puppeteer #apify

#jquery #файл #google-chrome-devtools #кукловод #apify

Вопрос:

Я использую apify/puppeteer-scraper , чтобы нажать кнопку загрузки и экспортировать данные на этой странице в CSV:

Мне удалось имитировать щелчок мыши по кнопке загрузки (в правом нижнем углу), и я прошел весь путь до загрузки CSV. Теперь я хочу загрузить полученный файл CSV в папку, чтобы его можно было использовать.

Есть ли какой-либо способ сделать это? Я попытался импортировать require('fs') , но, похоже, это не работает через Apify scraper.

Это мой код, который пока находится внутри Pagefunction(context) :

 const [response] = await Promise.all([
  await page.click('#download-ToolbarButton > span.tabToolbarButtonImg.tab-icon-download'),
  await page.waitForSelector('#DownloadDialog-Dialog-Body-Id > div > button:nth-child(4)'),
  await page.focus('#DownloadDialog-Dialog-Body-Id > div > button:nth-child(4)'),
  await page.click('#DownloadDialog-Dialog-Body-Id > div > button:nth-child(4)'),
  await page.waitFor(5000),
  await page.waitForSelector('#export-crosstab-options-dialog-Dialog-BodyWrapper-Dialog-Body-Id > div > div.foyjxgp > div:nth-child(2) > div > label:nth-child(2)'),
  await page.focus('#export-crosstab-options-dialog-Dialog-BodyWrapper-Dialog-Body-Id > div > div.foyjxgp > div:nth-child(2) > div > label:nth-child(2)'),
  await page.waitForSelector('#export-crosstab-options-dialog-Dialog-BodyWrapper-Dialog-Body-Id > div > div.fdr6v0d > button'),

  await page.click('#export-crosstab-options-dialog-Dialog-BodyWrapper-Dialog-Body-Id > div > div.foyjxgp > div:nth-child(2) > div > label:nth-child(2)'),
  await page.waitFor(60000),
  await page._client.send('Page.setDownloadBehavior', {behavior: 'allow', downloadPath: './downloads'})
  // await  page.hover('#export-crosstab-options-dialog-Dialog-BodyWrapper-Dialog-Body-Id > div > div.fdr6v0d > button'),
  // await page.click('#export-crosstab-options-dialog-Dialog-BodyWrapper-Dialog-Body-Id > div > div.fdr6v0d > button'),
  // await page.waitFor(5000)
  // page.click('#export-crosstab-options-dialog-Dialog-BodyWrapper-Dialog-Body-Id > div > div.foyjxgp > div:nth-child(2) > div > label:nth-child(2)')
]);  

Ответ №1:

Puppeteer scraper не предназначен для расширения другими библиотеками, даже собственными, и, хотя вы, вероятно, могли бы использовать решение, указанное ниже, в качестве обходного пути, было бы рекомендовано использовать пользовательский актер вместо готовых скребков, которые позволили бы вам требовать дополнительных библиотек. Вы можете опубликовать запрос проекта на marketplace, если вы не можете создать такого актера самостоятельно. https://help.apify.com/en/articles/3211799-how-to-add-external-libraries-to-web-scraper
https://apify.com/apify/puppeteer-scraper#context

https://sdk.apify.com/docs/guides/getting-started
https://apify.com/marketplace