commit 1c866cb4e2e8a8d7f1112ecf17629f7493e5bb94 Author: Prasanna Ranjan Date: Sun Nov 23 09:29:23 2025 +0100 puppeteer scripts diff --git a/Workflow/MyDealz Kommentare/puppeteer_cookie_banner_click.js b/Workflow/MyDealz Kommentare/puppeteer_cookie_banner_click.js new file mode 100644 index 0000000..ec799a7 --- /dev/null +++ b/Workflow/MyDealz Kommentare/puppeteer_cookie_banner_click.js @@ -0,0 +1,30 @@ +// Navigate to an IP lookup service +await $page.setViewport({ + width: 1024, + height: 768, + deviceScaleFactor: 1, +}); + +const deal_url = $json.message.link_preview_options.url; + +await $page.goto(deal_url, { waitUntil: ['load', 'domcontentloaded'] }); + + +// Extract the IP address from the page content +const selector = 'button[data-t="acceptAll"]'; +//const banner = 'div.popover-content.flex--inline'; + +await Promise.all([ +await $page.waitForSelector(selector, { visible: true }), +await $page.evaluate((selector) => +document.querySelector(selector).click(), selector), +]); + + + + +//await $page.click(selector); + +const cookies = await $page.cookies(); + +return [{ cookies }, {"url": deal_url}]; \ No newline at end of file diff --git a/Workflow/MyDealz Kommentare/puppeteer_extract_comments.js b/Workflow/MyDealz Kommentare/puppeteer_extract_comments.js new file mode 100644 index 0000000..6282b6c --- /dev/null +++ b/Workflow/MyDealz Kommentare/puppeteer_extract_comments.js @@ -0,0 +1,73 @@ +async function click_replies(page, selector_comment_body, selector_replies) { + for (i = 0; i < 1; i++) { + try { + const comment_cnt = await page.evaluate((selector_comment_body) => { + return document.querySelectorAll(selector_comment_body).length; + }, selector_comment_body); + + await page.waitForSelector(selector_replies, { visible: true, timeout: 2000 }); + await page.evaluate((selector) => + document.querySelector(selector).click(), selector_replies); + + await page.waitForFunction( + (selector, originalCount) => { + return document.querySelectorAll(selector).length > originalCount; + }, + { timeout: 10000 }, // Optional: Timeout anpassen + selector_comment_body, // Argument 1 für die Funktion im Browser + comment_cnt // Argument 2 für die Funktion im Browser + ); + // Optional: Kurze menschliche Pause (0.5 bis 1 Sekunde), um Bot-Erkennung zu vermeiden + await new Promise(r => setTimeout(r, 500 + Math.random() * 500)); + } catch (error) { + console.log("Keine Antworten vorhanden"); + break; + } + } +} + +async function extract_comments(page, data, selector_comment_body) { + // Extract Comments + data = data.concat(await page.evaluate((selector_comment_body) => { + const commentNode = document.querySelectorAll(selector_comment_body); + const commentsText = Array.from(commentNode).map(node => node.textContent.trim()) + return commentsText + }, selector_comment_body)); + // Optional: Kurze menschliche Pause (0.5 bis 1 Sekunde), um Bot-Erkennung zu vermeiden + await new Promise(r => setTimeout(r, 500 + Math.random() * 500)); + + return data +} + +const { cookies } = $input.first().json; +deal_url = $input.last().json['url']; + +const selector_replies = "button[data-t='moreReplies']"; +const selector_comment_body = ".comment-body"; +const sel_next_page = "::-p-aria(Nächste Seite)"; +var data = []; + +// Restore cookies +await $page.setCookie(...cookies); + +// Navigate to authenticated page +await $page.goto(deal_url); + +try { + + for (i = 0; i < 10; i++) { + //await click_replies($page, selector_comment_body, selector_replies); + data = await extract_comments($page, data, selector_comment_body); + + await Promise.all([ + await $page.waitForSelector(sel_next_page), + await $page.click(sel_next_page), + ]); + + } + +} catch (error) { + return [{ data }]; +} + +return [{ data }]; \ No newline at end of file