SattyaP / magang_smk5

0 stars 0 forks source link

Button solver #3

Closed CalvinArdiansyah18 closed 1 month ago

CalvinArdiansyah18 commented 2 months ago

Mas ini kok masih gak ketemu untuk solver button nya, udah saya coba masuk iframe sama body tapi tetep gimana ya?

SattyaP commented 2 months ago

Mas ini kok masih gak ketemu untuk solver button nya, udah saya coba masuk iframe sama body tapi tetep gimana ya?

codenya kaya gimana coba kirim disini

sudah bener selectornya ?

CalvinArdiansyah18 commented 2 months ago

require('dotenv').config() const { executablePath } = require("puppeteer"); const path = require('node:path') const fs = require('node:fs') const puppeteer = require("puppeteer-extra"); const pluginStealth = require("puppeteer-extra-plugin-stealth"); puppeteer.use(pluginStealth());

const captcha = path.join(process.cwd(), "./extension/captcha/");

const proccess = async () => { const browser = await puppeteer.launch({ headless: false, executablePath: executablePath(), args: [ --disable-extensions-except=${captcha}, --load-extension=${captcha}, ] }); const page = await browser.newPage(); page.sleep = (ms) => new Promise((res) => setTimeout(res, ms));

page.sleep = function (timeout) { return new Promise(function (resolve) { setTimeout(resolve, timeout); }); };

try { await handleBuster(page)

await page.goto("https://guestpostlinks.net/bulk-da-pa-checker-tool/", {
  waitUntil: ["domcontentloaded", "networkidle2"],
  timeout: 120000,
});

const fileContent = fs.readFileSync('./list.txt', 'utf8').trim();
await page.type('#dapa_link', fileContent);

await page.sleep(10000);

console.log("Check captcha....");
await page.waitForSelector('iframe[title="reCAPTCHA"]')
let frames = await page.frames();
const recaptchaFrame = frames.find(frame => frame.url().includes('api2/anchor'));

const checkbox = await recaptchaFrame.$('#recaptcha-anchor');
await checkbox.click({
  delay: rdn(30, 150)
});

console.log("Solve captcha....");

/**
 * TODO: Mengkondisikan apabila ada kotak puzzle captcha maka di click menggunakan solver dibawah jika tidak ada langsung click submit
 */

const iframe = await page.waitForSelector('iframe[title="recaptcha challenge expires in two minutes"]');

if (iframe) {
  const iframeContent = await iframe.contentFrame();
  const body = await iframeContent.waitForSelector('body');

  frames = await page.frames();
  const imageFrame = frames.find(frame => frame.url().includes('api2/bframe'));
  const busterSolver = await imageFrame.$('#solver-button');
  await busterSolver.click({
    delay: rdn(30, 150)
  });

  // const imageFrame = frames.find(frame => frame.url().includes('api2/bframe'));
  // const busterSolver = await imageFrame.$('#solver-button');
  // await busterSolver.click({
  //   delay: rdn(30, 150)
  // });

  // end captcha

} else {

  const submit = await page.waitForSelector(
    'button[type="submit"][id="DAPAformsend"]'
  );
  await submit.click();

  await page.sleep(5000);

  await page.waitForSelector("#dapa_tbl > tbody tr > td:not(:last-child):not(:nth-child(1)")

  const data = await page.evaluate(() => {
    const rows = document.querySelectorAll('#dapa_tbl > tbody tr > td:not(:last-child):not(:nth-child(1)');
    const data = [];
    rows.forEach((row) => {
      data.push(row.innerText);
    });
    return data;
  });
  // console.log(data);
  const dataString = data.join('\n');

  fs.writeFileSync('./data/data.txt', dataString);
  console.log('Data saved to data.txt');
}

} catch (error) { console.log("Error", error); // await browser.close(); } };

function rdn(min, max) { min = Math.ceil(min); max = Math.floor(max); return Math.floor(Math.random() * (max - min)) + min; }

const handleBuster = async (page) => { try { const pathId = path.join(process.cwd(), './data/id.txt'); const id = fs.readFileSync(pathId, 'utf-8') if (id === '') { await page.goto('chrome://extensions', { waitUntil: ['domcontentloaded', "networkidle2"], timeout: 120000 }) } else { await page.goto(chrome-extension://${id.trim()}/src/options/index.html, { waitUntil: ['domcontentloaded', "networkidle2"], timeout: 120000 }) }

if (id === '') {
  const idExtension = await page.evaluateHandle(
    'document.querySelector("body > extensions-manager").shadowRoot.querySelector("#items-list").shadowRoot.querySelectorAll("extensions-item")[0]'
  );
  await page.evaluate(e => e.style = "", idExtension)

  const id = await page.evaluate(e => e.getAttribute('id'), idExtension)

  await page.goto(`chrome-extension://${id}/src/options/index.html`, {
    waitUntil: ['domcontentloaded', "networkidle2"],
    timeout: 120000
  })

  fs.writeFileSync(pathId, id)
}

await page.sleep(3000)

await page.evaluate(() => {
  document.querySelector("body > div.v-application.v-theme--dark.v-layout.v-layout--full-height.v-locale--is-ltr.vn-app > div > div:nth-child(1) > div.option-wrap > div > div > div.v-input__control > div").click()
})
await page.sleep(3000)
await page.evaluate(() => {
  document.querySelector("body > div.v-overlay-container > div:nth-child(1) > div > div > div:nth-child(2)").click()
})
const fieldApi = await page.waitForSelector('#input-22')
fieldApi && await fieldApi.type(process.env.APIKEY)

} catch (error) { throw error; } }

proccess().catch(console.error);

CalvinArdiansyah18 commented 2 months ago

untuk selector e kayak e udah bener, apa kurang masuk lagi iku jadi gk bisa?

SattyaP commented 2 months ago

waduh panjangnyo

SattyaP commented 2 months ago

error e apa ?

untuk selector e kayak e udah bener, apa kurang masuk lagi iku jadi gk bisa?

CalvinArdiansyah18 commented 2 months ago

solver nya aja a mas?

CalvinArdiansyah18 commented 2 months ago

error e apa ?

untuk selector e kayak e udah bener, apa kurang masuk lagi iku jadi gk bisa?

Error TypeError: Cannot read properties of null (reading 'click')

SattyaP commented 2 months ago

error e apa ?

untuk selector e kayak e udah bener, apa kurang masuk lagi iku jadi gk bisa?

Error TypeError: Cannot read properties of null (reading 'click')

pas ini ya const busterSolver = await imageFrame.$('#solver-button'); await busterSolver.click({ delay: rdn(30, 150) });

SattyaP commented 2 months ago

coba ini

const iframeElement = await page.$('iframe'); const frame = await iframeElement.contentFrame(); const element = await frame.$('#solver-button'); if (element) { const boundingBox = await element.boundingBox(); if (boundingBox) { const x = boundingBox.x + boundingBox.width / 2; const y = boundingBox.y + boundingBox.height / 2; await frame.mouse.click(x, y); } } else { console.log("ganok"); } else { console.log("ganok part2") }

CalvinArdiansyah18 commented 2 months ago

coba ini

const iframeElement = await page.$('iframe'); const frame = await iframeElement.contentFrame(); const element = await frame.$('#solver-button'); if (element) { const boundingBox = await element.boundingBox(); if (boundingBox) { const x = boundingBox.x + boundingBox.width / 2; const y = boundingBox.y + boundingBox.height / 2; await frame.mouse.click(x, y); } } else { console.log("ganok"); } else { console.log("ganok part2") }

Error TypeError: frame.$ is not a function

SattyaP commented 2 months ago

full codenya mana punyamu

SattyaP commented 2 months ago

Lanjut besok aja bsok masih bisa kok aku baca issuenya

CalvinArdiansyah18 commented 2 months ago

full codenya mana punyamu

require('dotenv').config() const { executablePath } = require("puppeteer"); const path = require('node:path') const fs = require('node:fs') const puppeteer = require("puppeteer-extra"); const pluginStealth = require("puppeteer-extra-plugin-stealth"); puppeteer.use(pluginStealth());

const captcha = path.join(process.cwd(), "./extension/captcha/");

const proccess = async () => { const browser = await puppeteer.launch({ headless: false, executablePath: executablePath(), args: [ --disable-extensions-except=${captcha}, --load-extension=${captcha}, ] }); const page = await browser.newPage(); page.sleep = (ms) => new Promise((res) => setTimeout(res, ms));

page.sleep = function (timeout) { return new Promise(function (resolve) { setTimeout(resolve, timeout); }); };

try { await handleBuster(page)

await page.goto("https://guestpostlinks.net/bulk-da-pa-checker-tool/", {
  waitUntil: ["domcontentloaded", "networkidle2"],
  timeout: 120000,
});

const fileContent = fs.readFileSync('./list.txt', 'utf8').trim();
await page.type('#dapa_link', fileContent);

await page.sleep(10000);

console.log("Check captcha....");
await page.waitForSelector('iframe[title="reCAPTCHA"]')
let frames = await page.frames();
const recaptchaFrame = frames.find(frame => frame.url().includes('api2/anchor'));

const checkbox = await recaptchaFrame.$('#recaptcha-anchor');
await checkbox.click({
  delay: rdn(30, 150)
});

console.log("Solve captcha....");

/**
 * TODO: Mengkondisikan apabila ada kotak puzzle captcha maka di click menggunakan solver dibawah jika tidak ada langsung click submit
 */

// const iframe = await page.waitForSelector('iframe[title="recaptcha challenge expires in two minutes"]');

// if (iframe) {
//   const iframeContent = await iframe.contentFrame();
//   const body = await iframeContent.waitForSelector('body');

//   frames = await page.frames();
//   const imageFrame = frames.find(frame => frame.url().includes('api2/bframe'));
//   const busterSolver = await imageFrame.$('#solver-button');
//   await busterSolver.click({
//     delay: rdn(30, 150)
//   });

const iframeElement = await page.$('iframe');
const frame = iframeElement.contentFrame();
const element = await frame.$('#solver-button');
if (element) {
  const boundingBox = await element.boundingBox();
  if (boundingBox) {
    const x = boundingBox.x + boundingBox.width / 2 ;
    const y = boundingBox.y + boundingBox.height / 2;
    await frame.mouse.click(x, y);
  } else {
    console.log("ganok");
  }
} else {
  console.log("ganok 2");
}

  // const imageFrame = frames.find(frame => frame.url().includes('api2/bframe'));
  // const busterSolver = await imageFrame.$('#solver-button');
  // await busterSolver.click({
  //   delay: rdn(30, 150)
  // });

  // end captcha

// } else {

  const submit = await page.waitForSelector(
    'button[type="submit"][id="DAPAformsend"]'
  );
  await submit.click();

  await page.sleep(5000);

  await page.waitForSelector("#dapa_tbl > tbody tr > td:not(:last-child):not(:nth-child(1)")

  const data = await page.evaluate(() => {
    const rows = document.querySelectorAll('#dapa_tbl > tbody tr > td:not(:last-child):not(:nth-child(1)');
    const data = [];
    rows.forEach((row) => {
      data.push(row.innerText);
    });
    return data;
  });
  // console.log(data);
  const dataString = data.join('\n');

  fs.writeFileSync('./data/data.txt', dataString);
  console.log('Data saved to data.txt');
// }

} catch (error) { console.log("Error", error); // await browser.close(); } };

function rdn(min, max) { min = Math.ceil(min); max = Math.floor(max); return Math.floor(Math.random() * (max - min)) + min; }

const handleBuster = async (page) => { try { const pathId = path.join(process.cwd(), './data/id.txt'); const id = fs.readFileSync(pathId, 'utf-8') if (id === '') { await page.goto('chrome://extensions', { waitUntil: ['domcontentloaded', "networkidle2"], timeout: 120000 }) } else { await page.goto(chrome-extension://${id.trim()}/src/options/index.html, { waitUntil: ['domcontentloaded', "networkidle2"], timeout: 120000 }) }

if (id === '') {
  const idExtension = await page.evaluateHandle(
    'document.querySelector("body > extensions-manager").shadowRoot.querySelector("#items-list").shadowRoot.querySelectorAll("extensions-item")[0]'
  );
  await page.evaluate(e => e.style = "", idExtension)

  const id = await page.evaluate(e => e.getAttribute('id'), idExtension)

  await page.goto(`chrome-extension://${id}/src/options/index.html`, {
    waitUntil: ['domcontentloaded', "networkidle2"],
    timeout: 120000
  })

  fs.writeFileSync(pathId, id)
}

await page.sleep(3000)

await page.evaluate(() => {
  document.querySelector("body > div.v-application.v-theme--dark.v-layout.v-layout--full-height.v-locale--is-ltr.vn-app > div > div:nth-child(1) > div.option-wrap > div > div > div.v-input__control > div").click()
})
await page.sleep(3000)
await page.evaluate(() => {
  document.querySelector("body > div.v-overlay-container > div:nth-child(1) > div > div > div:nth-child(2)").click()
})
const fieldApi = await page.waitForSelector('#input-22')
fieldApi && await fieldApi.type(process.env.APIKEY)

} catch (error) { throw error; } }

proccess().catch(console.error);

SattyaP commented 2 months ago

if in dlu iframnya jadi if iframe baru akses query ke frame updaye juga selector iframenya pake yang lama

CalvinArdiansyah18 commented 2 months ago

if in dlu iframnya jadi if iframe baru akses query ke frame updaye juga selector iframenya pake yang lama

const iframe = await page.waitForSelector('iframe[title="recaptcha challenge expires in two minutes"]');

if (iframe) {
  const iframeElement = await page.$('iframe[title="recaptcha challenge expires in two minutes"]');
  const frame = iframeElement.contentFrame();
  const element = await frame.$('#solver-button');
  if (element) {
    const boundingBox = await element.boundingBox();
    if (boundingBox) {
      const x = boundingBox.x + boundingBox.width / 2;
      const y = boundingBox.y + boundingBox.height / 2;
      await frame.mouse.click(x, y);
    } else {
      console.log("ganok");
    }
  } else {
    console.log("ganok 2");
  }
}

gini a mas?
SattyaP commented 2 months ago

LOHH

CalvinArdiansyah18 commented 2 months ago

LOH

gak gitu a mas?

SattyaP commented 2 months ago

const iframe = await page.waitForSelector('iframe[title="recaptcha challenge expires in two minutes"]');

if (iframe) { const iframeElement = await page.$('iframe[title="recaptcha challenge expires in two minutes"]'); const frame = iframeElement.contentFrame(); if (frame) { const element = await frame.$('#solver-button'); if (element) { const boundingBox = await element.boundingBox(); if (boundingBox) { const x = boundingBox.x + boundingBox.width / 2; const y = boundingBox.y + boundingBox.height / 2; await page.mouse.click(x, y); } else { console.log("ganok"); } } else { console.log("ganok 2"); } } else { console.log("gnok 3 "); }

SattyaP commented 2 months ago

Tuh coba sorry ya baru bls jadwalku buat 2 hari kedepan agak sibuk

CalvinArdiansyah18 commented 2 months ago

Tuh coba sorry ya baru bls jadwalku buat 2 hari kedepan agak sibuk

aman mas gapapa

CalvinArdiansyah18 commented 2 months ago

Error TypeError: frame.$ is not a function

ini e selalu error mas apa harus buat variabel dulu?

CalvinArdiansyah18 commented 2 months ago

mas ini solver e sudah bisa kepencet yang orange, tapi pas saya jadikan if itu gak bisa kepencet

SattyaP commented 2 months ago

mas ini solver e sudah bisa kepencet yang orange, tapi pas saya jadikan if itu gak bisa kepencet

if gimana mkstnya ? bole kasi kodingan bagian itu ?

CalvinArdiansyah18 commented 2 months ago

mas ini solver e sudah bisa kepencet yang orange, tapi pas saya jadikan if itu gak bisa kepencet

if gimana mkstnya ? bole kasi kodingan bagian itu ?

gak jadi mas udah bisa barusan, sisah ngolah data yang di ambil aja

CalvinArdiansyah18 commented 2 months ago

const elIframe = await page.waitForSelector('iframe[title="recaptcha challenge expires in two minutes"]');

  if (elIframe) {
    const iframe = await elIframe.contentFrame();
    const body = await iframe.waitForSelector('body');
    const solverButton = await body.waitForSelector('#rc-imageselect > div.rc-footer > div.rc-controls > div.primary-controls > div.rc-buttons > div.button-holder.help-button-holder');
    await sleep(5000)
    solverButton && await solverButton.click();
    await sleep(5000)
  }else {
    console.log("Gak nemu");
  }

  mas ini kalau captcha oren e keluar bisa tapi kalau gk keluar gak bisa gimana ya?
CalvinArdiansyah18 commented 2 months ago

sama ini mas kalau udah masuk ke web nya terus ada tab baru yang otomatis pindah langsung gak mau jalan code nya

SattyaP commented 2 months ago

Gimana olah datanya? ada update? senin kalo bisa aku dapet info updatenya ya

CalvinArdiansyah18 commented 2 months ago

Gimana olah datanya? ada update? senin kalo bisa aku dapet info updatenya ya

Di simpan di file kah mas datanya? Atau gimana

SattyaP commented 2 months ago

Di simpan di file kah mas datanya? Atau gimana

ndak perlu di log aja pokonya dia udah ada pembeda antara data 1 dan data lainnya