请问 Nodejs 中 google 的 puppeteer 模块 和 node.js 自带 的 http、https 模块 有冲突,怎么解决?
请问 Nodejs 中 google 的 puppeteer 模块 和 node.js 自带 的 http、https 模块 有冲突,怎么解决?
测试代码段如下:
async function puppeteer_promise ( ) {
…var puppeteer = require(‘puppeteer’); /*** 屏蔽测试 /
…return ;
}
async function http_promise ( ) {
…var http = require(‘http’);
…var https= require(‘https’);
…var url = new URL ( “https://www.baidu.com/” ) ;
…var http = ( url.protocol == ‘https:’ ? https : http ) ; // 重新赋值 http ,判断是 http 还是 https ;
…console.log( “url.protocol:” + url.protocol ) ;
…http.get ( url , function ( res ) { / 屏蔽测试 /
…}).on(‘error’, function (err) {
…console.log(err);
…});
…return ;
}
async function test_alldata ( ) {
…console.log( “开始测试!” ) ;
…await puppeteer_promise();
…console.log( “puppeteer 结束!” ) ;
…await http_promise();
…console.log( “结束测试!” ) ;
…return ; // 隐式返回 Promise.resolve( ); 函数 ;
}
test_alldata();
报错信息如下:
(node:6212) UnhandledPromiseRejectionWarning: TypeError: Cannot read property ‘startsWith’ of undefined
at urlToOptions (internal/url.js:1259:28)
at Object.request ( https.js:279:15)
at Object.request (C:\Users\Claire\Desktop\spider\node_modules\agent-base\patch-core.js:25:22)
at Object.https.get (C:\Users\Claire\Desktop\spider\node_modules\agent-base\patch-core.js:48:21)
at http_promise (C:\Users\Claire\Desktop\spider\test.js:17:7)
at test_alldata (C:\Users\Claire\Desktop\spider\test.js:34:9)
at process._tickCallback (internal/process/next_tick.js:68:7)
at Function.Module.runMain (internal/modules/cjs/loader.js:832:11)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)
(node:6212) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 2)
(node:6212) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
Node 10.16
WIN10_x64 系统
屏蔽 var puppeteer = require(‘puppeteer’);
或者 屏蔽
…http.get ( url , function ( res ) { / 屏蔽测试 ***/
…}).on(‘error’, function (err) {
…console.log(err);
…});
运行就不会报错。
请问各位,知道是怎么回事吗?
有没有什么解决办法啊?
谢谢,我是从 15.3 升级到 16 的。
你用 12.6.0 会有这个问题吗?
没有试,晚上试看看
是 agent base 改变了 http 的行为导致的 …后来 node 修复了
谢谢解答啊
在Node.js中,Google的Puppeteer模块与Node.js自带的http、https模块通常不会有直接的冲突。它们各自服务于不同的功能:Puppeteer用于自动化Chrome或Chromium浏览器操作,而http、https模块则用于处理HTTP请求和响应。
如果遇到看似由冲突引起的问题,可能是由以下原因导致的:
- 代码错误:在代码中可能不小心重写了某些变量或未正确处理异步操作。
- 版本不兼容:Node.js或Puppeteer的版本与其他依赖项不兼容。
以下是一个简单的示例,展示如何在同一个Node.js项目中同时使用Puppeteer和https模块:
const puppeteer = require('puppeteer');
const https = require('https');
(async () => {
// 使用Puppeteer
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
await browser.close();
// 使用https模块
https.get('https://example.com', (res) => {
console.log('statusCode:', res.statusCode);
res.on('data', (d) => {
process.stdout.write(d);
});
}).on('error', (e) => {
console.error(e);
});
})();
确保你的Node.js和Puppeteer版本是最新的,或者至少是彼此兼容的。如果问题依旧存在,建议检查具体的错误信息并逐一排查。