Witam. Otóż męczę się trochę z działaniem Puppeteera po stronie servera. Postawiłem prosty server node.js po stronie którego miałbym uruchamiać Puppeteera, jednak integracja nie przeszła po mojej myśli:
Uncaught ProtocolError ProtocolError: Protocol error (Page.navigate): Invalid parameters Failed to deserialize params.url - BINDINGS: mandatory field missing at position 50
at <anonymous> (file:///C:/marcin/Projects/gsCChekker/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Connection.js:329:24)
at send (file:///C:/marcin/Projects/gsCChekker/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Connection.js:325:16)
at navigate (file:///C:/marcin/Projects/gsCChekker/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Frame.js:229:47)
at goto (file:///C:/marcin/Projects/gsCChekker/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Frame.js:207:13)
at goto (file:///C:/marcin/Projects/gsCChekker/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Page.js:440:91)
at module.exports (file:///C:/marcin/Projects/gsCChekker/gsCChekker.js:5:16)
at processTicksAndRejections (node:internal/process/task_queues:95:5)
Błąd pojawia się parę sekund po odpaleniu w przeglądarce i przez te parę sekund skrypt Puppeteera działa normalnie i wynik otrzymam taki jaki powinienem, o ile się zmieszczę w tych paru sekundach, nim wyskoczy powyższy błąd.
server.js wygląda następująco:
const http = require('http');
const port = process.env.PORT || 5000;
const path = require('path');
const fs = require('fs');
const url = require('url');
const indexPath = path.join(__dirname, '/index.html');
http.createServer(async (req, res) => {
res.writeHead(200, {'Content-Type': 'text/html'});
if(req.url === '/' && req.method === 'GET') {
res.end(fs.readFileSync(indexPath));
} else {
const query = url.parse(req.url, true).query;
const json = JSON.stringify(query);
const u = JSON.parse(json).url;
const gs = require('./gsCChekker.js');
gs(u).then(resolve => {
if(resolve) {
res.end('This site has Google Search Console Tool');
} else {
res.end('This site probably has not Google Search Console Tool');
}
});
}
}).listen(port, () => {
console.log(`Listening on Port: ${port}`);
});
Natomiast skrypt Puppeteera wygląda tak:
module.exports = async function(url) {
const puppeteer = require('puppeteer');
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(url, {waitUntil: 'domcontentloaded'});
const GSC = await page.$("meta[name='google-site-verification']");
const isGSC = (GSC === null) ? false : true;
page.close();
browser.close();
return Promise.resolve(isGSC);
}
No i działa dobrze, przez pierwsze dwie czy trzy sekundy po odpaleniu servera, ale po każdym odświeżeniu strony (czy to endpoint '/', czy to każdy inny pod else) wyskakuje powyższy błąd. Odkryłem, że to głównie ten kawałek kodu go powoduje:
gs(u).then(resolve => {
if(resolve) {
res.end('This site has Google Search Console Tool');
} else {
res.end('This site probably has not Google Search Console Tool');
}
});
Wie ktoś może, dlaczego ?
Co to za błąd, no i jak to naprawić ??
Bo mnie już skończyły się pomysły. Przeczesałem google i nie znalazłem odpowiedzi na mój problem (możliwe, że niezbyt dokładnie szukałem)