代码之家  ›  专栏  ›  技术社区  ›  tristansokol

用puppeter捕捉弹出文件下载

  •  1
  • tristansokol  · 技术社区  · 6 年前

    我正在使用puppeter自动下载 .csv 从一个面向人类的网站。

    page.click() 触发下载的事件。我遇到的问题是文件是作为弹出式下载下载的 Content-Disposition: attachment 头,我不知道如何捕捉数据。

    browser.on('targetcreated'... let newpage = await target.page(); )失败

    (node:27389) UnhandledPromiseRejectionWarning: Error: Protocol error (Page.enable): Target closed.
    

    我认为这是由于新目标的短暂性(它是一个小文件),并且在目标关闭之前,承诺不会解决。

    response 事件和请求拦截,但由于它们的作用域是页面,而且技术上新页面正在打开,所以它们似乎不是正确的操作过程。似乎我需要的是能够为浏览器而不是页面设置全局样式的事件处理程序,或者找出为什么不能从新目标获取页面。感谢任何帮助。下面是捕获的目标创建事件的副本,以防有助于

    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 } 
    
    0 回复  |  直到 6 年前