Javascript 用Puppeter捕捉弹出式文件下载

Javascript 用Puppeter捕捉弹出式文件下载,javascript,puppeteer,headless-browser,google-chrome-headless,Javascript,Puppeteer,Headless Browser,Google Chrome Headless,我正在使用Puppeter自动从面向人类的网站下载.csv 我想要的文件是从唯一生成的URL下载的,因此我使用page.click()events来触发下载。我遇到的问题是,该文件是以弹出式下载方式下载的,带有内容处置:attachment标题,我不知道如何捕获数据 我已尝试为浏览器设置事件处理程序。在('targetcreated'…上,当文件下载时会成功触发该事件处理程序,但是,在该事件处理程序中,我无法获得很多信息(或数据),因为我尝试获取新目标的页面(let newpage=wait t

我正在使用Puppeter自动从面向人类的网站下载
.csv

我想要的文件是从唯一生成的URL下载的,因此我使用
page.click()
events来触发下载。我遇到的问题是,该文件是以弹出式下载方式下载的,带有
内容处置:attachment
标题,我不知道如何捕获数据

我已尝试为
浏览器设置事件处理程序。在('targetcreated'…
上,当文件下载时会成功触发该事件处理程序,但是,在该事件处理程序中,我无法获得很多信息(或数据),因为我尝试获取新目标的页面(
let newpage=wait target.page();
)失败

(node:27389) UnhandledPromiseRejectionWarning: Error: Protocol error (Page.enable): Target closed.
我认为这是由于新目标(它是一个小文件)的短暂性造成的,并且在目标关闭之前承诺不会解决

我也尝试过类似于
响应
事件和请求拦截的处理程序,但由于这些都是针对页面的,而且从技术上讲,新页面正在打开,它们似乎不是正确的操作过程。似乎我需要的是能够为浏览器而不是页面或figu设置全局样式的事件处理程序你知道为什么我不能从我的新目标那里获得页面。感谢你的帮助。下面是捕获的目标创建事件的副本,以防有帮助

Target {
  _targetInfo:
   { targetId: '8E6B6B77483AE2F37E7DDD51739B220E',
     type: 'page',
     title: '',
     url: 'https://example.com/cca21744-72f0-49b3-a048-12348d1bd97c/exports/af81008a-0547-4e62-aa28-a3228bc2b785/outputResource',
     attached: false,
     openerId: 'A66C8D5FD6206E6FE55139B2440B1CE5',
     browserContextId: 'C2D9840857DC03C38B1114F9008F3638' },
  _browserContext:
   BrowserContext {
     _events: {},
     _eventsCount: 0,
     _maxListeners: undefined,
     _connection:
      Connection {
        _events: [Object],
        _eventsCount: 4,
        _maxListeners: undefined,
        _url: 'ws://127.0.0.1:54439/devtools/browser/ebf728ce-2bb2-4d20-9c3f-4868ae7768c3',
        _lastId: 126,
        _callbacks: Map {},
        _delay: 5.240825308449115,
        _transport: [WebSocketTransport],
        _sessions: [Map],
        _closed: false },
     _browser:
      Browser {
        _events: [Object],
        _eventsCount: 1,
        _maxListeners: undefined,
        _ignoreHTTPSErrors: false,
        _defaultViewport: [Object],
        _process: [ChildProcess],
        _screenshotTaskQueue: [TaskQueue],
        _connection: [Connection],
        _closeCallback: [Function: gracefullyCloseChrome],
        _defaultContext: [Circular],
        _contexts: Map {},
        _targets: [Map] },
     _id: null },
  _targetId: '8E6B6B77483AE2F37E7DDD51739B220E',
  _sessionFactory: [Function],
  _ignoreHTTPSErrors: false,
  _defaultViewport: { width: 800, height: 600 },
  _screenshotTaskQueue: TaskQueue { _chain: Promise { undefined } },
  _pagePromise: null,
  _initializedCallback: [Function],
  _initializedPromise: Promise { true },
  _closedCallback: [Function],
  _isClosedPromise: Promise { <pending> },
  _isInitialized: true } 
目标{
_目标信息:
{targetId:'8E6B6B77483AE2F37E7DDD51739B220E',
键入:“页面”,
标题:“”,
网址:'https://example.com/cca21744-72f0-49b3-a048-12348d1bd97c/exports/af81008a-0547-4e62-aa28-a3228bc2b785/outputResource',
附:假,,
openerId:'A66C8D5FD6206E6FE55139B2440B1CE5',
browserContextId:'C2D9840857DC03C38B1114F9008F3638'},
_browserContext:
浏览器上下文{
_事件:{},
_事件提示:0,
_maxListeners:未定义,
_连接:
联系{
_事件:[对象],
_事件提示:4,
_maxListeners:未定义,
_url:'ws://127.0.0.1:54439/devtools/browser/ebf728ce-2bb2-4d20-9c3f-4868ae7768c3',
_lastId:126,
_回调:映射{},
_延误:5.240825308449115,
_运输:[WebSocketTransport],
_会话:[映射],
_关闭:false},
_浏览器:
浏览者{
_事件:[对象],
_事件提示:1,
_maxListeners:未定义,
_忽略HttpSerrors:错误,
_defaultViewport:[对象],
_进程:[ChildProcess],
_screenshotTaskQueue:[任务队列],
_连接:[连接],
_closeCallback:[函数:GracefullyCLOCOSECHROME],
_defaultContext:[循环],
_上下文:映射{},
_目标:[Map]},
_id:null},
_目标代码:“8E6B6B77483AE2F37E7DDD51739B220E”,
_sessionFactory:[函数],
_忽略HttpSerrors:错误,
_默认视口:{宽度:800,高度:600},
_screenshotTaskQueue:TaskQueue{{u-chain:Promise{undefined}},
_pagePromise:null,
_initializedCallback:[函数],
_初始化Promise:Promise{true},
_closedCallback:[函数],
_isClosedPromise:Promise{},
_isInitialized:true}

作为一种解决方法,我能够通过计算URL、复制cookies和使用
request
直接发出请求来取得进展,这样我就可以捕获结果。