I’m using Pupeteer to pull data from google maps.
it’s working perfectly on my local machine,however after pulling to production I ended up on the following error
Error during scraping: ProtocolError: Waiting for selector .wiI7pd
failed: Runtime.callFunctionOn timed out. Increase the ‘protocolTimeout’ setting in launch/connect calls for a higher timeout if needed
const puppeteer = require('puppeteer');
const getReviews = async (url, output = "json") => {
url = "https://maps.app.goo.gl/EXgBhBRtwxgW9WZ5A"
output = output.toLowerCase();
if (output !== "json" && output !== "object") {
console.error('INVALID OUTPUT OPTION');
return;
}
url = url.toString();
let browser;
try {
const browser = await puppeteer.launch({ headless: true });
const page = await browser.newPage();
await page.goto(url);
await page.waitForSelector('.wiI7pd',{timeout : 0});
const data = await page.evaluate(() => {
let reviewAuthorNamesClasses = document.getElementsByClassName('d4r55');
let reviewAuthorNames = [];
for (let elements of reviewAuthorNamesClasses) {
reviewAuthorNames.push(elements.innerText);
}
let datesClasses = document.getElementsByClassName('PIpr3c');
let dates = [];
for (let elements of datesClasses) {
dates.push(elements.innerText);
}
let ratingsClasses = document.getElementsByClassName('kvMYJc');
let ratings = [];
for (let elements of ratingsClasses) {
ratings.push(elements.children.length);
}
let reviewsContentClasses = document.getElementsByClassName('wiI7pd');
let reviewsContent = []
for (let elements of reviewsContentClasses) {
reviewsContent.push(elements.innerText);
}
return {
reviewAuthorNames,
dates,
ratings,
reviewsContent
}
});
console.log(data)
console.log('done ! closing browser...')
browser.close();
return output === "json" ? JSON.stringify(data) : data;
} catch (error) {
console.error('Error during scraping:', error);
if (browser) {
await browser.close();
}
throw new Error('Error during scraping');
}
};
getReviews()
I also tried
await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36');
but didn’t work..
anyone came across that?
thanks
I tried setting timeout option.
I tried setting user agent
no results..
I also tried
await page.goto(url, {
waitUntil: 'networkidle2', // <-- good practice to wait for page to fully load
});
1