-
Notifications
You must be signed in to change notification settings - Fork 0
/
scrapeKleoBookmarklet200.js
1 lines (1 loc) · 4.58 KB
/
scrapeKleoBookmarklet200.js
1
javascript:(function()%7B(async%20function%20()%20%7B%0A%20%20const%20name%20%3D%20document.querySelector(%0A%20%20%20%20'.pv-text-details__about-this-profile-entrypoint'%0A%20%20).innerText%0A%20%20const%20kleo%20%3D%20document.querySelector('%23kleo').shadowRoot%0A%20%20let%20allData%20%3D%20%5B%5D%0A%20%20let%20processedIndices%20%3D%20new%20Set()%20%2F%2F%20Set%20to%20keep%20track%20of%20processed%20indices%0A%0A%20%20const%20totalPosts%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20const%20postElement%20%3D%20Array.from(%0A%20%20%20%20%20%20kleo.querySelectorAll('%5Bid*%3D%22headlessui-listbox-button%22%5D')%0A%20%20%20%20).find((el)%20%3D%3E%20el.textContent.includes('Posts')).innerText%0A%0A%20%20%20%20console.log('postElement%3A%20'%2C%20postElement)%0A%20%20%20%20const%20totalPosts%20%3D%20parseInt(postElement.match(%2F%5C((%5Cd%2B)%5C)%2F)%5B1%5D)%0A%20%20%20%20return%20totalPosts%0A%20%20%7D%0A%0A%20%20const%20getEngagement%20%3D%20(element)%20%3D%3E%20%7B%0A%20%20%20%20const%20elements%20%3D%20element.querySelectorAll('span.text-low-emphasis-light')%0A%0A%20%20%20%20return%20elements%5Belements.length%20-%201%5D.innerText.match(%2F(%5Cd%2B)%2Fg)%0A%20%20%7D%0A%0A%20%20const%20totalNumberOfItems%20%3D%20200%0A%20%20%2F%2F%20const%20totalNumberOfItems%20%3D%20totalPosts()%0A%0A%20%20console.log('Total%20number%20of%20posts%3A%20'%2C%20totalNumberOfItems)%0A%0A%20%20async%20function%20collectData()%20%7B%0A%20%20%20%20const%20elements%20%3D%20kleo.querySelectorAll('%5Bdata-index%5D')%0A%20%20%20%20for%20(let%20element%20of%20elements)%20%7B%0A%20%20%20%20%20%20const%20dataIndex%20%3D%20parseInt(element.getAttribute('data-index'))%0A%20%20%20%20%20%20%2F%2F%20Example%3A%20Storing%20the%20innerText%20of%20each%20element%2F%2F%20Only%20process%20if%20dataIndex%20has%20not%20been%20processed%20before%0A%20%20%20%20%20%20if%20(!processedIndices.has(dataIndex))%20%7B%0A%20%20%20%20%20%20%20%20const%20engagement%20%3D%20getEngagement(element)%0A%20%20%20%20%20%20%20%20%2F%2F%20console.log('engagement%3A%20'%2C%20engagement)%0A%0A%20%20%20%20%20%20%20%20allData.push(%7B%0A%20%20%20%20%20%20%20%20%20%20index%3A%20dataIndex%2C%0A%20%20%20%20%20%20%20%20%20%20type%3A%20element.querySelector('span.text-xs.font-medium.rounded-md')%0A%20%20%20%20%20%20%20%20%20%20%20%20%3F.innerText%2C%0A%20%20%20%20%20%20%20%20%20%20postUrl%3A%20element%0A%20%20%20%20%20%20%20%20%20%20%20%20.querySelector('a.text-linkedin-blue')%0A%20%20%20%20%20%20%20%20%20%20%20%20%3F.getAttribute('href')%2C%0A%20%20%20%20%20%20%20%20%20%20imageUrl%3A%20element%0A%20%20%20%20%20%20%20%20%20%20%20%20.querySelector('img.object-cover')%0A%20%20%20%20%20%20%20%20%20%20%20%20%3F.getAttribute('src')%2C%0A%20%20%20%20%20%20%20%20%20%20pusblishDate%3A%20element.querySelector(%0A%20%20%20%20%20%20%20%20%20%20%20%20'span.inline-flex.items-center.gap-x-1.text-low-emphasis-light'%0A%20%20%20%20%20%20%20%20%20%20)%3F.innerText%2C%0A%20%20%20%20%20%20%20%20%20%20reactions%3A%20parseInt(%0A%20%20%20%20%20%20%20%20%20%20%20%20element.querySelector('span.-ml-1%5C%5C.5.text-low-emphasis-light')%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3F.innerText%0A%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20comments%3A%20parseInt(engagement%5B0%5D)%20%7C%7C%20null%2C%0A%20%20%20%20%20%20%20%20%20%20shares%3A%20parseInt(engagement%5B1%5D)%20%7C%7C%20null%2C%0A%20%20%20%20%20%20%20%20%20%20content%3A%20element.querySelector(%0A%20%20%20%20%20%20%20%20%20%20%20%20'.relative.text-sm.mt-3.overflow-hidden'%0A%20%20%20%20%20%20%20%20%20%20).innerText%2C%0A%20%20%20%20%20%20%20%20%7D)%0A%20%20%20%20%20%20%20%20processedIndices.add(dataIndex)%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20if%20(allData.length%20%3C%20totalNumberOfItems%20-%201)%20%7B%0A%20%20%20%20%20%20console.log(allData.length%2C%20totalNumberOfItems)%0A%20%20%20%20%20%20elements%5Belements.length%20-%201%5D.scrollIntoView()%0A%20%20%20%20%20%20await%20new%20Promise((resolve)%20%3D%3E%20setTimeout(resolve%2C%201000))%20%2F%2F%20Wait%20for%20any%20lazy-loaded%20elements%0A%20%20%20%20%20%20return%20collectData()%20%2F%2F%20Recursive%20call%20to%20check%20for%20more%20elements%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20await%20collectData()%0A%0A%20%20const%20blob%20%3D%20new%20Blob(%5BJSON.stringify(allData%2C%20null%2C%202)%5D%2C%20%7B%0A%20%20%20%20type%3A%20'application%2Fjson'%2C%0A%20%20%7D)%0A%20%20const%20a%20%3D%20document.createElement('a')%0A%20%20a.href%20%3D%20URL.createObjectURL(blob)%0A%20%20a.download%20%3D%20%60%24%7Bname.replaceAll('%20'%2C%20'-')%7D.json%60%0A%20%20document.body.appendChild(a)%0A%20%20a.click()%0A%20%20document.body.removeChild(a)%0A%7D)()%7D)()%3B