Created
September 6, 2025 08:25
-
-
Save FaltoGH/1706d18db99ec7e5ee7706395abe7a1a to your computer and use it in GitHub Desktop.
Semi-automatic Dcinside lottery submitter.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function parseIntComma(x){ | |
// 쉼표가 섞인 수 문자열을 정수로 변환한다. | |
return parseInt(x.replaceAll(",","")); | |
} | |
async function getJson1(){ | |
// 최근 14일 동안의 게시물, 댓글 수를 받아온다. | |
let response1=await fetch("https://gall.dcinside.com/ajax/lottery_ajax/get_statistics", { | |
"headers": { | |
"accept": "application/json, text/javascript, */*; q=0.01", | |
"accept-language": "en-US,en;q=0.9,ko;q=0.8", | |
"content-type": "application/x-www-form-urlencoded; charset=UTF-8", | |
"sec-ch-ua": "\"Google Chrome\";v=\"141\", \"Not?A_Brand\";v=\"8\", \"Chromium\";v=\"141\"", | |
"sec-ch-ua-mobile": "?0", | |
"sec-ch-ua-platform": "\"Windows\"", | |
"sec-fetch-dest": "empty", | |
"sec-fetch-mode": "cors", | |
"sec-fetch-site": "same-origin", | |
"x-requested-with": "XMLHttpRequest" | |
}, | |
"referrer": location.href, // 현재 페이지의 주소 | |
"body": "ci_t="+get_cookie('ci_c'), // CSRF 토큰 | |
"method": "POST", | |
"mode": "cors", | |
"credentials": "include" | |
}); | |
let json1=await response1.json(); | |
console.log("got json: ",json1); | |
return json1; | |
} | |
async function submit1(post,cmt){ | |
// 텍스트박스에 post, cmt를 채우고 등록 버튼을 누른다. | |
console.log("submitting "+post+" and "+cmt+" ..."); | |
await sleep(1); | |
document.getElementById("ltrpost").value=post; | |
await sleep(1); | |
document.getElementById("ltrcmt").value=cmt; | |
await sleep(1); | |
document.getElementsByClassName("btn_blue small repley_add btn_svc")[0].click(); | |
await sleep(1); | |
console.log("submit1() done."); | |
} | |
function getRandomIntInclusive(min, max) { | |
// min 이상 max 이하의 정수를 반환한다. | |
const minCeiled = Math.ceil(min); | |
const maxFloored = Math.floor(max); | |
return Math.floor(Math.random() * (maxFloored - minCeiled + 1) + minCeiled); // 최댓값도 포함, 최솟값도 포함 | |
} | |
function d20(){ | |
// 1 이상 20 이하의 정수를 반환한다. | |
return getRandomIntInclusive(1,20); | |
} | |
function sleep(ms) { | |
return new Promise((r) => setTimeout(r, ms)); | |
} | |
async function generate1(){ | |
let ret=[]; | |
let json1=await getJson1(); | |
let N=json1.length; | |
// 게시물과 댓글 수의 평균을 구한다. | |
let article1=0; | |
let reply1=0; | |
for(let i=0;i<N;i++){ | |
article1+=parseIntComma(json1[i]["article"]); | |
reply1+=parseIntComma(json1[i]["reply"]); | |
} | |
article1/=N; | |
reply1/=N; | |
// 실수를 정수로 변환 | |
article1=Math.floor(article1); | |
reply1=Math.floor(reply1); | |
article1+=d20(); | |
reply1+=d20(); | |
for(let i=0;i<10;i++){ | |
ret.push([article1+d20(),reply1+d20()]); | |
// 중복 수 응모 방지 | |
article1+=20; | |
reply1+=20; | |
} | |
return ret; | |
} | |
async function submitAll(generated1){ | |
for(let i=0;i<generated1.length;i++){ | |
// 도배로 인한 차단을 방지하기 위해 sleep | |
await sleep(1212+121*d20()); | |
await submit1(generated1[i][0],generated1[i][1]); | |
await sleep(1212+121*d20()); | |
} | |
console.log("submitAll() done."); | |
} | |
let generated1=await generate1(); | |
console.log("generated: ",generated1); | |
await submitAll(generated1); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment