연결 중…
연결 중…
전체 보기
PASA 공지방
Telegram · @PASACREW

그래서... 일단 자동화 코드도 미리 만들어둠..

게시
2025.11.07 11:39
조회
1,008
포워드
50

‼️무조건 https://mememax.com/ 사이트에 작업할 지갑 연결 후에 해야함.

😊 OKX 지갑 기준
1. 우측 상단 지구본(체인선택) 왼쪽 설정버튼
2. open as sidebar(사이드바로 열기)
3. 지구본 선택해서 MemeCore 체인 선택
4. M 코인 선택
5. 지갑화면 아무곳이나 우클릭 해서 검사버튼
6. console 에 아래코드 복붙
7. 경고 뜨면서 paste(붙여넣기) 오류나면
allow pasting < 직접 타이핑해서 엔터

‼️ 시빌 잡는다고 되어 있는데
코드에
const addresses = [ "지갑주소입력" ]; 되어 있는 부분에

const addresses = [
"지갑주소1" ,
"지갑주소2" ,
"지갑주소3"
];
으로 하면 차례대로 그 지갑에 쏘게 됨.
// === 🧩 사용자 설정 영역 ===
const runs = 1; // 총 몇 사이클 실행할지
const addresses = [ "지갑주소입력" ]; // $M 을 보낼 주소 (본인주소도 됨)

const amount = "0.001"; // 전송할 금액 (UI에 맞는 형식으로)
const actionDelay = 1500; // 각 동작 사이 (ms) - 기본 0.2초
const addressDelay = 1500; // 주소 입력 후 지연 (ms)
const cycleDelay = 3000; // 한 사이클 끝난 후 다음 사이클 대기 (ms)
// =============================

const xpathSend = '//*[@id="app"]/div[1]/div/div/div/div[2]/div[2]/div[1]/div[1]';
const xpathAddress = '//*[@id="app"]/div[1]/div/div[1]/div/div[2]/div[1]/div/div[2]/textarea';
const xpathAmount = '//*[@id="app"]/div[1]/div/div[1]/div/div[2]/div[2]/div/div[2]/input[@type="text"]';
const xpathNext = '//*[@id="app"]/div[1]/div/div[2]/div/button';
const xpathConfirm = '//*[@id="app"]/div[1]/div/div/div/div[7]/div/button';

// === 🧩 유틸리티 함수들 ===
function $x(xpath, root = document) {
const res = document.evaluate(xpath, root, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
return res.singleNodeValue;
}

function clickXPath(xpath) {
const el = $x(xpath);
if (!el) {
console.warn("Element not found for click:", xpath);
return false;
}
el.click();
return true;
}

async function simulateReactInput(el, value, delay = 20) {
const prototype = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(el), "value");
const setValue = prototype.set;

el.focus();
el.value = "";
for (const ch of value) {
setValue.call(el, el.value + ch);
el.dispatchEvent(new Event("input", { bubbles: true }));
el.dispatchEvent(new KeyboardEvent("keydown", { bubbles: true, key: ch }));
el.dispatchEvent(new KeyboardEvent("keypress", { bubbles: true, key: ch }));
el.dispatchEvent(new KeyboardEvent("keyup", { bubbles: true, key: ch }));
await new Promise(r => setTimeout(r, delay));
}
el.dispatchEvent(new Event("change", { bubbles: true }));
el.blur();
}

async function simulateInputByXPath(xpath, value, delay = 20) {
const el = $x(xpath);
if (!el) {
console.warn("Element not found for input:", xpath);
return false;
}
await simulateReactInput(el, value, delay);
return true;
}

function sleep(ms) {
return new Promise(r => setTimeout(r, ms));
}

window.stopAutoTx = false;

(async function main() {
console.log(AutoTx start (${runs} cycles));

for (let i = 0; i < runs; i++) {
if (window.stopAutoTx) {
console.warn("Stopped manually");
break;
}

const addr = addresses[i % addresses.length];
console.log(Cycle ${i + 1}/${runs} - Address: ${addr});

clickXPath(xpathSend);
await sleep(actionDelay);

const addrEl = $x(xpathAddress);
if (addrEl) {
await simulateReactInput(addrEl, addr);
await sleep(addressDelay);
} else {
console.warn("Address element not found.");
}

const amtEl = $x(xpathAmount);
if (amtEl) {
await simulateReactInput(amtEl, amount);
await sleep(actionDelay);
} else {
console.warn("Amount element not found.");
}

clickXPath(xpathNext);
await sleep(actionDelay);

clickXPath(xpathConfirm);
await sleep(actionDelay);

console.log(Cycle ${i + 1} done. Waiting ${cycleDelay / 1000}s before next.);
await sleep(cycleDelay);
}

console.log("All cycles complete or stopped.");
})();

조회1,008포워드50텔레그램에서 보기