본문 바로가기

Update Macro

Chapter3 - 프로젝트 구현

1. 구현 Part1 - Login

  • 로그인 페이지로 이동합니다.
  • 설정파일에 저장되어 있는 아이디와 비밀번호를 입력하여 로그인을 진행합니다.
  • 새 페이지(로그인 완료 후 이동되는 페이지)의 로딩을 기다리고 작업 수행 페이지로 이동합니다.
const login = async (page) => {
    await page.goto('https://domeggook.com/ssl/member/mem_loginForm.php');
    await page.type('#idInput', process.env.ID);
    await page.type('#pwInput', process.env.PW);
    await page.click('#formLogin > input.formSubmit');
    await page.waitForNavigation();
    await page.goto('https://domemedb.domeggook.com');
};

 

2. 구현 Part2 - Work Type 1

  • 업데이트를 진행하는 URL로 이동 후 업데이트를 진행합니다.
  • 사용자가 설정한 시간만큼 대기후 재귀호출하여 반복적으로 작업이 수행되도록 구현했습니다.
const soldout = async (page) => {
    await page.goto(URL 생략);
    await page.evaluate('sendSoldout()');
    setTimeout(() => { soldout(page); }, parseInt(process.env.INTERVAL, 10) * 1000);
};

 

3. 구현 Part3 - Work Type 2

  • 해당 페이지에서는 page event를 listen하는 on을 이용해 alert창이 팝업되면 "확인"버튼을 누르게끔 세팅했습니다.
  • 이하 내용은 "work Type1"과 동일합니다.
const update = async (page, init) => {
    if (init) page.on('dialog', async (dialog) => { await dialog.accept(); });
    await page.goto(URL 생략);
    await page.goto(URL 생략);
    await page.evaluate('delDataError()');
    setTimeout(() => { update(page, false); }, parseInt(process.env.INTERVAL, 10) * 1000);
};

 

4. Main

  • browser를 생성하고 사용자의 설정에 따라 브라우저를 보이게 할지 말지 설정합니다.
  • 이후 만들어진 함수들을 이용해 로그인하고 work들을 반복적으로 수행하게끔 구성합니다.
const main = async () => {
    const browser = await puppeteer.launch({ headless: process.env.HIDE_BROWSER !== '0' });

    await login(await browser.newPage());
    Promise.all([
        process.env.ACTION1 === '1' ? soldout(await browser.newPage()) : null,
        process.env.ACTION2 === '1' ? reinventory(await browser.newPage()) : null,
        process.env.ACTION3 === '1' ? update(await browser.newPage(), true) : null,
        process.env.ACTION4 === '1' ? send(await browser.newPage(), true) : null,
    ]);
};

 

더 자세한 코드는 제 github에 가시면 보실 수 있습니다.

이외에 궁금하신 내용은 댓글로 달아주세요. 최대한 많은 답변 드릴 수 있도록 하겠습니다.

'Update Macro' 카테고리의 다른 글

Advanced1 - 프로젝트 빌드하기  (0) 2023.09.25
Chapter2 - 프로젝트 구조  (0) 2023.09.18
Chapter1 - 개요 및 요구사항  (0) 2023.07.26