#Need help with shadow-root
1 messages · Page 1 of 1 (latest)
Medallia helps the world’s best-loved brands deliver great customer experiences. Connect Salesforce to the Medallia Experience Cloud and deliver insights to your Sales and Service teams that show them where to focus for improving account relationships.
this is the link of the page i need to scrape reviews from.
Hey @vast cliff
Here is how:
https://stackoverflow.com/a/66399497/9734216
didn't help, if you inspect reviews on the link i provided above, you can find there are multiple <ace-review> tags that have shadow-root inside.
i can scrape one at a time, but i want to scrape all simultaneously
Here is how you can get all of them:
let reviews = $('#main > page-container').shadowRoot.querySelector('x-lazy').shadowRoot.querySelector('listing-reviews').shadowRoot.querySelectorAll('ace-review')
reviews.forEach((item => console.log(item.shadowRoot.querySelector('.review-item'))));
async requestHandler({ request, page, enqueueLinks }) { console.log(Scraping ${request.url}...`);
console.log('New page created')
// let pageData = await page.evaluate(
// () => document.querySelector("*").outerHTML
// )
let pageData = await page.evaluate(
() => document.querySelector("page-container").shadowRoot.querySelector("analytics-handler>div>x-lazy").shadowRoot.querySelector("#reviews-panel").shadowRoot.querySelectorAll("ace-review").shadowRoot.innerHTML
);
const $ = cheerio.load(pageData);
const data = [];
$('.review-item').each((i, el) => {
let reviewDate = $(el).find("ace-link[data-testid='review-date-link']").text();
let reviewAuthor = $(el).find("a>span.bolded").text();
let reviewTitle = $(el).find("p.review-content.bolded").text();
let reviewDesc = $(el).find("p.review-content").text();
let overAllRatings = $(el).find("div[slot='label']").text().split(".")[0];
data.push({
author: reviewAuthor,
date: reviewDate,
sourceCollector: 'appexchange.salesforce.com',
sourceURL: request.url,
title: reviewTitle,
description: reviewDesc,
ratings: overAllRatings
});
});
await Actor.pushData(data);
},`
how do i include that code into this request handler
i tried it, was getting $ not defined