You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
const{ window }=require('page-evaluate');const{ write, exists }=require('fs-sync-utils')const{ send }=require('emailjs-gmail')(process.env.GMAIL_USERNAME,process.env.GMAIL_PASSWORD);consturl=process.env.SCRAPE_URL;constemailToAddress=process.env.EMAIL_TO;// e.g. contents: [{href: 'https://...', name: 'Example 1'}, ...]constlistItemsFileName=process.env.LIST_ITEMS_FILENAME||'./list-items.json';constlistItemsQuerySelector=process.env.LIST_ITEM_QUERY_SELECTOR;constlistItemLinkSelector=process.env.LINK_QUERY_SELECTOR||'a';constlistItemsFromLastRunFileExists=exists(listItemsFileName);constlistItemsFromLastRun=listItemsFromLastRunFileExists
? require(listItemsFileName)
: [];window(url).then(({ document })=>{// store list items on page in an arrayconstlistItems=Array.from(document.querySelectorAll(listItemsQuerySelector)).map(el=>{consta=el.querySelector(listItemLinkSelector);letitemUrl='';if(a){constmiddleSlash=url.endsWith('/')||a.href.startsWith('/')
? ''
: '/';itemUrl=a.href.startsWith('http')
? a.href
: `${url}${middleSlash}${a.href}`.replace('//','/');// replace double slash with single slash}return{url: itemUrl,title: el.textContent,time: newDate().toString()// 1st seen at};});// create an array of any list items that were not in the last runconstnewListItems=listItems.filter(newListItem=>{return!listItemsFromLastRun.map(item=>item.url).includes(newListItem.url)});console.log(`${newDate().toString()} - Found ${newListItems.length}/${listItems.length} new list items`)// send a message if there are any new itemsif(listItemsFromLastRunFileExists&&newListItems.length>0){send(emailToAddress,`There are ${newListItems.length} new items at ${url}`);}// overwrite file every timewrite(listItemsFileName,JSON.stringify(listItems,null,2));});