【发布时间】:2018-12-30 04:09:47
【问题描述】:
我有两个用于 puppeteer 自动化的 Node.js 脚本。
1)launcher.js
此 Puppeteer 脚本启动 chrome 浏览器并断开 chrome 以便可以使用 WSEndpoint 进行连接。
const puppeteer = require('puppeteer');
module.exports = async () => {
try {
const options = {
headless: false,
devtools: false,
ignoreHTTPSErrors: true,
args: [
`--no-sandbox`,
`--disable-setuid-sandbox`,
`--ignore-certificate-errors`
]
};
const browser = await puppeteer.launch(options);
let pagesCount = await browser.pages();
const browserWSEndpoint = await browser.wsEndpoint();
// console WSEndPoint say : "ws://127.0.0.1:42207/devtools/browser/dbb2525b-ce44-43c2-a335-ff15d0306f36"
console.log("browserWSEndpoint----- :> ", browserWSEndpoint);
await browser.disconnect();
return browserWSEndpoint;
} catch (err) {
console.error(err);
process.exit(1);
return false;
}
};
2) 连接器.js
启动无头 chrome 并尝试通过各种主机名通过 WSEndPoint 连接 chrome。如果我使用node connector.js localhost 的运行命令运行此脚本,它会尝试以 localhost 作为主机名连接 WSEndpint。
const puppeteer = require('puppeteer');
const launcher = require('./launcher');
(async (host) => {
try {
let WSEndPoint = await launcher();
WSEndPoint = WSEndPoint.replace('127.0.0.1', host);
console.log("WSENDPOINT :", WSEndPoint);
const browser = await puppeteer.connect({
browserWSEndpoint: WSEndPoint,
ignoreHTTPSErrors: true
});
let pagesCount = await browser.pages();
console.log("Pages available :> ", pagesCount.length);
// const browserWSEndpoint = await browser.wsEndpoint();
await browser.disconnect();
process.exit(1);
return true;
} catch (err) {
console.error(err);
process.exit(1);
return false;
}
})(process.argv[2]);
但我无法使用我的本地 IP 地址(例如 192.168.1.36)连接 chrome 的 WSEndpint。为什么?
错误信息是
{ Error: connect ECONNREFUSED 192.168.1.33:36693
at Object._errnoException (util.js:992:11)
at _exceptionWithHostPort (util.js:1014:20)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1186:14)
code: 'ECONNREFUSED',
errno: 'ECONNREFUSED',
syscall: 'connect',
address: '192.168.1.33',
port: 36693 }
【问题讨论】:
标签: node.js google-chrome puppeteer google-chrome-headless