javascript - 使用 Puppeteer 捕获弹出文件下载
问题描述
我正在使用 puppeteer 自动.csv
从面向人类的网站下载 a。
我想要的文件是从唯一生成的 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 }
解决方案
推荐阅读
- node.js - 如何在 node-http-proxy 中设置 Access-Control-Allow-Headers 标头
- python - 我将如何使用 BeautifulSoup 刮掉这个 ESPN Fantasy 播放器表?
- python - 在 Google Analytics Reporting API v4 中查询超过 10k 行限制
- clamav - 本地服务器需要时间来更新 clamav db
- python - 球面反射物体的分水岭分割
- database - 尝试将列设置为不为空并在一个语句中添加默认约束
- angular - 不要在自定义元素之间共享 ngrxStore
- python - 我可以在循环时分配和访问 Tkinter 列表框中的变量吗?
- python - 屏幕上闪烁的 Python 框
- xml - 如何使用 XSLT 替换命名空间中的元素?