Closed CalvinArdiansyah18 closed 1 month 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 ?
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);
untuk selector e kayak e udah bener, apa kurang masuk lagi iku jadi gk bisa?
waduh panjangnyo
error e apa ?
untuk selector e kayak e udah bener, apa kurang masuk lagi iku jadi gk bisa?
solver nya aja a mas?
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')
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) });
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") }
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
full codenya mana punyamu
Lanjut besok aja bsok masih bisa kok aku baca issuenya
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);
if in dlu iframnya jadi if iframe baru akses query ke frame updaye juga selector iframenya pake yang lama
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?
LOHH
LOH
gak gitu a mas?
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 "); }
Tuh coba sorry ya baru bls jadwalku buat 2 hari kedepan agak sibuk
Tuh coba sorry ya baru bls jadwalku buat 2 hari kedepan agak sibuk
aman mas gapapa
Error TypeError: frame.$ is not a function
ini e selalu error mas apa harus buat variabel dulu?
mas ini solver e sudah bisa kepencet yang orange, tapi pas saya jadikan if itu gak bisa kepencet
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 ?
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
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?
sama ini mas kalau udah masuk ke web nya terus ada tab baru yang otomatis pindah langsung gak mau jalan code nya
Gimana olah datanya? ada update? senin kalo bisa aku dapet info updatenya ya
Gimana olah datanya? ada update? senin kalo bisa aku dapet info updatenya ya
Di simpan di file kah mas datanya? Atau gimana
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
Mas ini kok masih gak ketemu untuk solver button nya, udah saya coba masuk iframe sama body tapi tetep gimana ya?