使用Puppeteer

时间:2018-12-21 04:59:28

标签: javascript puppeteer headless-browser google-chrome-headless

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

我想要的文件是从唯一生成的URL下载的,所以我正在使用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 个答案:

没有答案