주니어 개발자 1호

API가 없어도 웹 크롤링으로 가능한 게임 기능 수집 본문

사이드 프로젝트 진행

API가 없어도 웹 크롤링으로 가능한 게임 기능 수집

No_1 2023. 4. 9. 22:07
  • 게임: 사이퍼즈
  • 목적: 게임내 온라인 클랜원 수 수집
    • 아무도 없는 상태에서..들어가면..쓸쓸하잖아요..

게임 api만으로, 디스코드 봇을 만들어서 승률이나 그런것은 편히 볼 수 있었는데 접속중인 사람에 대해 알려주는 api가 없었고 그 때문에, 매번 게임에 접속해서 친구창을 확인할 수 있었는데

그게 너무 불편하고 싫어서 고민하다가, 어..? 마이페이지에..이런게 제공되네..?

이거 수집하면 끝 아니야? 라는 생각에 금방 만들어 버렸다.

누군가에게는 필요할 것 같아 코드를 공유하고자..합니다..

 

코드

const puppeteer = require('puppeteer');

(async () => {
    const browser = await puppeteer.launch({headless: true});
    const page = await browser.newPage();

    const cy_id = "id";
    const cy_pw = "pw";

    await page.goto('<https://cyphers.nexon.com/>');

    await page.click('.chk_week');
    await page.waitForSelector('.log_info');
    await page.click('.log_info > a');
    await page.waitForSelector('.show');

    await page.evaluate((id, pw) => {
        document.querySelector('input[name=id]').value = id;
        document.querySelector('input[name=password]').value = pw;
    }, cy_id, cy_pw);

    await page.click('.lobtn');

    try{
        await page.waitForSelector('.pw_cpin', {timeout: 1000});
        await page.click('#passwordCp')
    }catch{

    }
    

    await page.goto('<https://cyphers.nexon.com/mypage/account/info>');
    await page.waitForSelector('.clan',{timeout: 1000 });

    const result = await page.evaluate(() => {
        const onlineClanText = document.querySelector('#wrap > section.content.mypage > div.mycount > ul.clan > li > p:nth-child(4)').innerText;
        return onlineClanText.replace('접속 중인 클랜원','').replace('\\n','').split('/')[0].trim();
    });
    console.log(result);

    browser.close();
})();