在我的电子应用程序中,我想创建一个验证码收割机弹出窗口,我遇到了一个 git 存储库,特别是这个 https://github.com/sashapisdets/Captcha-Solver 并且在克隆后新鲜,它可以工作很好,但问题是,它使用的是非常旧的 Electron 版本,而我的个人应用程序使用的是最新版本。 Harvester 中的一个主要核心功能是它拦截 http 协议并有一个回调来显示 html,但是在新版本的 Electron 中,interceptBufferProtocol 已被弃用并被 .handle 取代,但无论我做什么,我都可以似乎无法使用protocol.handle拦截http协议,有人对我如何更新它有任何想法吗?
原创功能
function SetupIntercept() {
protocol.interceptBufferProtocol('http', (req, callback) => {
if(req.url == 'https://www.google.com/recaptcha/api2/demo') {
fs.readFile(__dirname + '/captcha.html', 'utf8', function(err, html){
callback({mimeType: 'text/html', data: Buffer.from(html)});
});
}else{
const request = net.request(req)
request.on('response', res => {
const chunks = []
res.on('data', chunk => {
chunks.push(Buffer.from(chunk))
})
res.on('end', async () => {
const file = Buffer.concat(chunks)
callback(file)
})
})
if (req.uploadData) {
req.uploadData.forEach(part => {
if (part.bytes) {
request.write(part.bytes)
} else if (part.file) {
request.write(readFileSync(part.file))
}
})
}
request.end()
}
})
};
更新功能
function SetupIntercept() {
protocol.handle('http', async (req) => {
if (req.url === 'http://supremenewyork.com/') {
try {
const html = await fs.promises.readFile(__dirname + '/captcha.html', 'utf8');
return {
mimeType: 'text/html',
data: Buffer.from(html),
};
} catch (err) {
console.error('Error reading captcha.html:', err);
return {
mimeType: 'text/plain',
data: Buffer.from('Error loading page'),
};
}
} else {
return new Promise((resolve, reject) => {
const request = net.request(req);
request.on('response', (res) => {
const chunks = [];
res.on('data', (chunk) => {
chunks.push(Buffer.from(chunk));
});
res.on('end', () => {
const file = Buffer.concat(chunks);
resolve({ data: file });
});
res.on('error', (error) => {
console.error('Error in response:', error);
reject({
mimeType: 'text/plain',
data: Buffer.from('Error loading page'),
});
});
});
if (req.uploadData) {
req.uploadData.forEach((part) => {
if (part.bytes) {
request.write(part.bytes);
} else if (part.file) {
request.write(readFileSync(part.file));
}
});
}
request.end();
});
}
});
}
我自己找到了解决方案,因为interceptBufferProtocol已被弃用,您可以使用
protocol.handle('http, (req) => {})
或者如果您正在使用分区
session.protocol.handle('http, (req) => {})
你也更新这个
return {
mimeType: 'text/html',
data: Buffer.from(html),
};
到
return new Response(Buffer.from(html), { headers: { 'Content-Type': 'text/html' } });