|
(() => { |
|
"use strict"; |
|
|
|
if (document.readyState !== "complete") { |
|
globalThis.addEventListener("load", () => main()); |
|
} else main(); |
|
|
|
async function main() { |
|
const consolePrefix = "HelloFresh Recipe Downloader:"; |
|
|
|
const ratingCloseBtn = document.querySelector( |
|
'button[data-test-id="rating-nudge-dismiss"]' |
|
); |
|
if (ratingCloseBtn != null) { |
|
ratingCloseBtn.click(); |
|
} |
|
|
|
const root = document |
|
.querySelector("#root") |
|
.querySelector(`div[data-test-id="past-deliveries"]`); |
|
|
|
let pastDeliveriesShowMore = true; |
|
while (pastDeliveriesShowMore) { |
|
const pastDeliveriesShowMoreBtn = root.querySelector( |
|
`button[data-test-id="past-deliveries-show-more-button"]` |
|
); |
|
pastDeliveriesShowMore = pastDeliveriesShowMoreBtn != null; |
|
if (pastDeliveriesShowMore) { |
|
pastDeliveriesShowMoreBtn.click(); |
|
await new Promise((resolve) => setTimeout(resolve, 1000)); |
|
} |
|
} |
|
|
|
const pastDeliveries = Array.from( |
|
root.querySelectorAll( |
|
`div[data-test-id^="past-delivery-container-"]` |
|
) |
|
) |
|
.map((x) => Array.from(x.lastElementChild.children)) |
|
.flat(1); |
|
|
|
const recipeCount = pastDeliveries.length; |
|
console.info(`${consolePrefix} Found ${recipeCount} recipes`); |
|
let recipeCounterSuccess = 0; |
|
let recipeCounterFailure = 0; |
|
|
|
for (const d of pastDeliveries) { |
|
const recipeBtn = d.querySelector( |
|
'button[data-test-id="recipe-body"]' |
|
); |
|
if (recipeBtn == null) continue; |
|
recipeBtn.click(); |
|
|
|
await new Promise((resolve) => setTimeout(resolve, 1000)); |
|
|
|
const recipe = document.querySelector("#recipe-preview-modal"); |
|
|
|
const recipeTitle = recipe.querySelector( |
|
'[data-test-id="recipe-preview-title"]' |
|
).textContent; |
|
|
|
const recipeDownload = recipe.querySelector('a[href$=".pdf"]'); |
|
if (recipeDownload != null) { |
|
recipeCounterSuccess += 1; |
|
console.info( |
|
`${consolePrefix} Downloading recipe "${recipeTitle}"` |
|
); |
|
recipeDownload.click(); |
|
} else { |
|
recipeCounterFailure += 1; |
|
console.warn( |
|
`${consolePrefix} There is no download available for recipe "${recipeTitle}"` |
|
); |
|
continue; |
|
} |
|
|
|
const closeBtn = recipe.querySelector( |
|
'button[data-test-id="recipe-preview-close-button"]' |
|
); |
|
if (closeBtn == null) continue; |
|
closeBtn.click(); |
|
} |
|
|
|
console.info( |
|
`${consolePrefix} ${recipeCounterSuccess} successful recipes` |
|
); |
|
console.info(`${consolePrefix} ${recipeCounterFailure} failed recipes`); |
|
const recipeCounterSkipped = |
|
recipeCount - (recipeCounterSuccess + recipeCounterFailure); |
|
console.info( |
|
`${consolePrefix} ${recipeCounterSkipped} skipped recipes` |
|
); |
|
} |
|
})(); |