Puppeteer-如何获得当前页面(应用程序/pdf)的缓冲区或文件?
使用Puppeteer(页面是 应用程序/pdf .使用headless: false,该页面通过Chromium PDF查看器加载,但我想使用无头.我如何下载原始.pdf文件或与另一个库一起用作斑点"> https://www.npmjs.com/package/pdf-parse )? 解决方案 由于Puppeteer当前不支持无头模式下的PDF文档导航, page.goto() 由于 'request' 事件,并在使用请求客户端获取PDF缓冲区之前检测资源是否为PDF. 获得PDF缓冲区后,您可以使用 要中止原始的木偶请求,或者如果请求不适合PDF,则可以使用 request.continue() 正常继续请求. 这是一个完整的工作示例: 'use strict'; const puppeteer = require('puppeteer'); const request_client = require('request-promise-native'
0 2024-04-04
编程技术问答社区
Puppeteer-"要求主框架太早!"
我已经使用puppeteer创建了一个函数,该功能检查用户是否已登录.基本上,首先,它检查浏览器,页面是否打开,然后查找选择器,然后根据发现项目返回reture/false. 在 export async function checkIfUserIsLoggedIn() { const logger = getLogger('checkIfUserIsLoggedIn()'); try { if (!page || !browser) { logger.info('page or browser is not open'); return false; } logger.info('page or browser is open'); await delay(randomWaitTimeSeconds1_2()); // await page.waitForSelector(selector); c
2 2024-04-04
编程技术问答社区
在Puppeteer中,如何将chrome窗口从默认配置文件切换到所需配置文件
我的要求是在新配置文件上测试Chrome扩展. 我转介 -switches/用于Chromium args [ - 用户data-dir, - profile-directory] ​​ 启动浏览器后,打开了2个Chrome Windows.一个具有给定的配置文件和扩展名,另一个带有默认配置文件和给定的扩展名.此外,重点是在具有默认配置文件的窗口上.因此所有动作都在发生. 我曾期望只有1个浏览器窗口使用所需的配置文件和扩展. 我尝试将焦点切换到所需的窗口,但是browser.browsercontexts().长度为1,它是带有默认配置文件的浏览器.另外,browser.targets()表明只有1个目标作为浏览器. 我的环境: 1. Puppeteer版本:6.9.0 2.平台/OS版本:Windows 10 Pro版本1803 3. URL(如果适用): 4. node.js版本:10.16.3 我尝试的是: a.从路径\到\ my \
4 2024-04-04
编程技术问答社区
无法找到并点击条件条款的按钮
我是Pupeeteer的新手,首先是我要做的是加载页面并单击按钮.但是,它无法找到元素.我认为这是因为我需要找到父母或父母的父元素. Accept All 这是从Inspect 中获得的完整CSS选择器 #focus-lock-id > div.sc-furwcr.lhriHG > div > div.sc-bYoBSM.egarKh > div > div > div.sc-dlVxhl.bEDIID > div > button:nth-child(3) 这是我的代码: const puppeteer
0 2024-04-04
编程技术问答社区
等待元素在Puppeteer中拥有特定的文本
我想关闭页面和浏览器,以检测元素从"在线"到"离线"的更改. 目前,我每10秒检查一次. import puppeteer from 'puppeteer'; const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto('https://example-chat-app.com'); console.log('chat website has opened') setInterval(async () => { let status = await page.evaluate(`document.querySelector('#statusDiv').innerHTML`) if (status == 'offLine') { await page.close() await browser.c
10 2024-04-04
编程技术问答社区
如何在puppeteer中点击有某种内容的链接?
如果我的页面中有一些内容,例如: Hi! 如何使用Google的木偶来自动单击该元素? 我需要能够基于其内容而不是ID,类或属性选择它. 是否有$('a:contains("Hi!")')我可以利用此元素的东西? 我该如何使用 https://github.com/googlechrome/pooglechrome/puppeteer > 谢谢 解决方案 首先,我们必须通过文本找到元素. /** * findElemByText - Find an Element By Text * * @param {String} str case-insensitive string to search * @param {String} selector = '*' selector to search * @param {String} leaf = 'outerHTML' leaf
2 2024-04-04
编程技术问答社区
Puppeteer中的多浏览器与多标签
我有100个网页,我必须测试运行时错误.我找到了可以做到"无汗"的木偶插件,但是我遇到了一个困境:一个启动了一个带有多个选项卡的浏览器或每个链接的新浏览器.在这种情况下,最好的方法是什么? 如果有多个标签,我听说,当标签不在焦点中时,CSS动画和其他东西(现在不记得)将无法使用. 显然,多个浏览器会导致更高的CPU负载(否?) 解决方案 这些是我认为的每种方法的优点: 多个浏览器的优势: 单独的过程:如果一个浏览器崩溃,其他浏览器会继续运行 一个浏览器的优势(具有多个页面): 更少的内存用法:尽管在现实中,内存和CPU的使用在很大程度上取决于您正在执行的任务(屏幕截图,DOM操纵) cookie(和其他数据)共享 也可以选择使用多个 contextss ,比两个单独的浏览器所需的内存要少,但不共享cookie. 因此,实际上,您可能应该尝试两个选择.您可能想看看图书馆 puppteer-cluster 我也写了错误处理和浏览器在崩
0 2024-04-03
编程技术问答社区
Puppeteer:如何存储一个会话(包括cookies、页面状态、本地存储等)并在以后继续?
是否可以使用一个木偶脚本打开并与页面进行交互,然后保存该浏览器会话为IS,并具有另一个脚本加载并从那里继续? "浏览器会话"是指当前加载的页面,包括页面状态(DOM空间和JavaScript变量等),cookie,本地存储,整个Shebang.基本上,它需要的一切都需要继续以前的脚本关闭的位置. 如果没有,那么至少可以导出和进口cookie和本地存储吗?因此,我可以重新加载一个特定的页面并继续处理,保持任何登录或会话数据完整. 解决方案 我不能确定,但​​是由于Puppeteer是Chrome DevTools协议(CDP)的"只是"包装器,并且CPD没有一个本机的"命令",它可以执行您要求的工作,所以不可能为整个Shebang做到这一点. 但是您有选择.一个不错的选择是将下一个脚本的同一浏览器重新限制.您只需要通过" Excerpt P> 用户数据目录包含个人资料数据,例如历史记录, 书签和cookie以及其他每个安装的当地状态. 尽管该引用并不写
2 2024-04-03
编程技术问答社区
puppeteer通过启用cookies和Javascript绕过cloudflare。
(在nodejs->仅服务器端). 我正在进行一些网络刀片,有些页面受到Cloudflare Antiddos页面的保护.我正在尝试浏览此页面.通过搜索,我发现了很多有关隐形或recapcha的文章.但是事实是,CloudFlare甚至都不想给我Capcha,它一直被卡在页面上(等待5秒),因为它以红色显示(打开JavaScript和Reload)和(打开cookie and Relooad),由我的JavaScript的方式似乎很活跃,因为我的程序在许多网站上运行并处理JavaScript. 这是我的代码: //vm = this; vm.puppeteer.use(vm.StealthPlugin()) vm.puppeteer.use(vm.AdblockerPlugin({ blockTrackers: true })) let browser = await vm.puppeteer.launch({ headless: true }); let br
0 2024-04-03
编程技术问答社区
如何避免在Puppeteer和Phantomjs上被检测为机器人?
Puppeteer和Phantomjs相似.我遇到的问题都是两者都发生的,而且代码也相似. 我想从网站上获取一些信息,这些信息需要身份验证才能查看这些信息.我什至无法访问主页,因为它像"可疑活动"一样被检测到: https ://i.stack.imgur.com/atovn.png 我发现,当我使用名为 cookie 的标头对邮递员进行测试时,问题不会发生,并且它的cookie值在浏览器上捕获,但是该cookie一段时间后就到了.因此,我猜Puppeteer/Phantomjs都没有捕获cookie,因为此网站拒绝无头浏览器访问. 我该怎么办? // Simple Javascript example var page = require('webpage').create(); var url = 'https://www.expertflyer.com'; page.open(url, function (status) { if( status
0 2024-04-03
编程技术问答社区
未处理的承诺拒绝(拒绝ID:1): 错误:杀死ESRCH
我已经在网络和SOF上进行了一些研究,但对此错误没有任何帮助. 我使用Windows 10 Ubuntu Bash安装了节点和Puppeteer,但没有设法使其正常工作,但我设法使其在Windows上使用,而不会在另一台计算机上使用bash. 我的命令是: node index.js 我的index.js试图拍摄页面的屏幕截图: const puppeteer = require('puppeteer'); async function run() { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto('https://github.com'); await page.screenshot({ path: 'screenshots/github.png' });
2 2024-03-28
编程技术问答社区
当试图按空格键时,puppeteer错误未知键:" "。
我试图通过使用Puppeteer自动进行打字测试来制作一个有趣的项目,但是当我想按空格时,此错误会弹出 D:\scraping\puppeteer tut\node_modules\puppeteer\lib\cjs\puppeteer\common\assert.js:28 throw new Error(message); ^ Error: Unknown key: " " at assert (D:\scraping\puppeteer tut\node_modules\puppeteer\lib\cjs\puppeteer\common\assert.js:28:15) at Keyboard._Keyboard_keyDescriptionForString (D:\scraping\puppeteer tut\node_modules\puppeteer\lib\cjs\puppeteer\common\In
2 2024-03-26
编程技术问答社区
JEST-SyntaxError: 未预期的令牌'出口'与uuid库的关系
我只用JavaScript Jest时解决了类似的错误,但是目前我无法使用Typescript进行. 我的所有测试都可以运行正常,直到我安装了需要@types/jest-environment-puppeteer,@types/puppeteer和@types/expect-puppeteer的Puppeteer. 安装它们后,木偶测试运行完美,但是其他测试开始失败,以下错误. D:\...\api\node_modules\uuid\dist\esm-browser\index.js:1 ({"Object.":function(module,exports,require,__dirname,__filename,jest){export { default as v1 } from './v1.js';
0 2024-03-26
编程技术问答社区
在Linux上使用Puppeteer的Azure Web应用程序
我正在尝试在Linux Azure Web应用程序上运行Puppeteer.但是日志显示 /node_modules/puppeteer/.local-chromium/linux-782078/chrome-linux/chrome: 加载共享库时的错误:libgobject-2.0.so.0:无法打开 共享对象文件:没有此类文件或目录 我认为这是由于Azure上的Linux分布所致.我的问题是:它是死胡同还是我可以做些什么? 解决方案 看起来App Service中的默认环境没有运行无头铬的必要依赖项.但是,您可以在自定义Docker映像上安装的依赖项上运行应用程序服务.这是一个很好的起点: https://github.com/buildkite/docker-puppeteer P>
0 2024-03-26
编程技术问答社区
当在Linux上的azure功能节点上部署Puppeteer时抛出启动异常
问题:使用Puppeteer获取网站的屏幕截图.在Dev Machine上工作正常,但在部署到云上的Azure函数时会引发异常. 环境:在Azure(节点12,Linux,消费计划),使用服务总线主题触发的功能. 错误: Result: Failure Exception: Error: Failed to launch the browser process! spawn /home/site/wwwroot/node_modules/puppeteer/.local-chromium/linux-818858/chrome-linux/chrome EACCES TROUBLESHOOTING: https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md Stack: Error: Failed to launch the browser process! spawn /h
0 2024-03-25
编程技术问答社区
ChromeDriver只支持Chrome89版本
使用Azure DevOps,以某种方式停止工作,当我运行ng lint && ng e2e && ng test --watch=false时,我无法完成测试.这在运行本地时正在工作. [16:43:25] I/launcher - Running 1 instances of WebDriver [16:43:25] I/direct - Using ChromeDriver directly... [16:43:27] E/launcher - session not created: This version of ChromeDriver only supports Chrome version 89 Current browser version is 88.0.4298.0 with binary path D:\a\1\s\node_modules\puppeteer\.local-chromium\win64-818858\chrome-win\chrome.ex
2 2024-03-25
编程技术问答社区
如何获得任何 Discord 服务器的总成员数?
我正在尝试构建一个刮擦脚本,以获取一堆Discord Server的总成员.我实际上是用uppeteer这样做的,但是我认为我的IP地址已被禁止,因为即使邀请链接正常,我也会从Discord中获得"邀请无效"错误. 我的问题是,Discord是否具有API来获得任何服务器的总成员数量?还是为此目的有任何第三方库?或其他方法? const puppeteer = require('puppeteer') const discordMembers = async ({ server, browser }) => { if (!server) return let totalMembers const page = await browser.newPage() try { await page.goto(`https://discord.com/invite/${server}`, { timeout: 3000 })
0 2024-03-23
编程技术问答社区
从AWS lambda上传屏幕截图到s3桶失败
我试图在AWS lambda上使用Puppeteer进行屏幕截图,并将屏幕截图上传到S3存储桶中.但是,S3.putObject方法似乎不起作用.在lambda控制台上,我既得到了"上传屏幕截图" s3://$ {s3bucket}/$ {filename}'"和"上传已完成"消息,而不是"内部回调"消息.奇怪的是,在执行lambda期间,我没有错误,但是我只是无法在PutoBject方法内收到消息,也找不到屏蔽中的屏幕截图.谁能给我一些有关如何调试的建议? const aws = require('aws-sdk'); const s3 = new aws.S3({ apiVersion: '2006-03-01' }); module.exports.saveScreenshotToS3 = async(page, s3bucket, filename) => { let buffer = await page.screenshot({encoding: "base6
2 2024-03-22
编程技术问答社区
AWS CDK TypeScript lambda错误:"铬
AWS CDK,Typescript Lambda和Lambda层问题 - chromium.executablePath不是函数 我正在使用AWS CDK在打字稿中从事AWS lambda功能.我的Lambda功能利用木偶和自定义铬构建来生成PDF.但是,我遇到了与chromium.executablePath有关的TypeError. 层依赖性: my package.json包括lambda层的以下依赖关系: "dependencies": { "@sparticuz/chromium": "^106.0.2", "puppeteer-core": "^18.0.5" } lambda功能: 这是我的lambda函数的相关部分: const puppeteer = require("/opt/nodejs/puppeteer-core"); const chromium = require("/opt/nodejs/@sparticu
4 2024-03-22
编程技术问答社区
如何将无头的chromium模块与AWS Lambda捆绑?
我正在尝试将puppeteer与lambda一起使用,但是,在无服务器部署上,由于超过了250MB捆绑的包装尺寸限制,lambda错误出现了. 因此,为了达到极限,我改用了没有包装铬包装的Puppeteer Core.这就需要引用可执行器以启动Chrome的路径. (例如puppeteer.launch({executablePath: headlessChromiumPath})); 但是,我不确定如何将无头铬加载到我的容器中,以便以后可以引用它. 解决这个问题,我正在尝试几件事: 首先,我已经下载了一个无头铬,然后将其包含在我的API中. 文件结构: -run-puppeteer.js -headless_shell.tar.gz 引用如: const browser = await puppeteer.launch({ executablePath: "../headless_shell.tar.gz" });