셀프등록 로직
const puppeteer = require('puppeteer');
const ID = 'max444';
const PASSWORD = 'dldmswk!12';
const selfRegister = async (carNumber) => {
const browser = await puppeteer.launch({ headless: false, slowMo: 30 });
const page = await browser.newPage();
await page.on('dialog', async (dialog) => {
if (dialog.type() === 'alert') {
await dialog.dismiss();
}
if (dialog.type() === 'confirm') {
await dialog.accept();
}
});
await page.setViewport({ width: 1500, height: 1000 });
await page.goto('<http://qa132.encar.io/login?backpath=http%3A%2F%2Fqa5.encar.io%3A81%2Fsl%2Fsl_index.do>');
await page.waitForSelector('#id', { timeout: 10000 });
await page.type('#id', ID);
await page.type('#password', PASSWORD);
await page.evaluate(() => document.querySelectorAll('button')[2].click());
await page.waitForNavigation();
const goApply = await page.waitForSelector('.link_apply', { timeout: 10000 });
await goApply.click();
await page.waitForSelector('#carNo', { timeout: 10000 });
await page.evaluate(() => document.getElementById('carNo').value = '');
await page.type('#carNo', carNumber);
await page.click('#agree');
await page.click('#chkBtn');
try {
await page.waitForSelector('.numerror_pp.on', { timeout: 500 });
const message = await page.evaluate(() => document.querySelectorAll('#numerror_div dl dt')[0].textContent);
browser.close();
return {
status: 'error',
message,
};
} catch (e) {
console.log('Find Car!');
}
// 차량정보 페이지
await page.waitForSelector('#divmnfc');
const offManufacturer = await page.$('.rs_manuf.off');
if (offManufacturer) {
await page.click('#chkmnfc');
await page.waitForSelector('#formnfcUl a');
await page.evaluate(() => document.querySelectorAll('#formnfcUl a')[0].click());
}
const offModelGroup = await page.$('.rs_ser.off');
if (offModelGroup) {
await page.click('#chkmdlgroup');
await page.waitForSelector('#mdlgroupUl a');
await page.evaluate(() => document.querySelectorAll('#mdlgroupUl a')[0].click());
}
const model = await page.waitForSelector('#chkmdl');
await model.click();
await page.waitForSelector('#mdlUl a');
await page.evaluate(() => document.querySelectorAll('#mdlUl a')[0].click());
const offBadge = await page.$('.rs_grade.off');
if (offBadge) {
await page.click('#chkclshead');
await page.waitForSelector('#clsheadUl a');
await page.evaluate(() => document.querySelectorAll('#clsheadUl a')[0].click());
}
const offBadgeDetail = await page.$('.rs_grade2.off');
if (offBadgeDetail) {
try {
await page.click('#chkclsdetail');
await page.waitForSelector('#clsdetailUl a');
await page.evaluate(() => document.querySelectorAll('#clsdetailUl a')[0].click());
} catch (e) {
console.log('No exist badge detail case');
}
}
const offYear = await page.$('.rs_year.off');
if (offYear) {
await page.click('#chkyear');
await page.waitForSelector('#yearUl a');
await page.evaluate(() => document.querySelectorAll('#yearUl a')[1].click());
await page.evaluate(() => document.querySelectorAll('#monthUl a')[1].click());
}
const offYear2 = await page.$('.rs_year2.off');
if (offYear2) {
await page.click('#chkkidiyear');
await page.waitForSelector('#kidiyearUl a');
await page.evaluate(() => document.querySelectorAll('#kidiyearUl a')[1].click());
}
try {
await page.waitForSelector('#divtrns.ok', { timeout: 2000 });
} catch (e) {
await page.type('#dsp', '2000');
await page.click('#chktrns');
await page.waitForSelector('#trnsUl_001');
await page.click('#trnsUl_001');
}
await page.click('#chkcolor');
await page.click('#color_0');
await page.type('#mlg', '30000');
await page.click('#submitOK');
// 옵션 페이지
try {
await page.waitForSelector('#uiLayerCoach');
await page.evaluate(() => document.querySelector('#uiLayerCoach .btn_confirm').click(), { timeout: 300 });
} catch (e) {
console.log('no coach');
}
try {
await page.waitForSelector('#uiLayerCoach2', { timeout: 500 });
await page.evaluate(() => document.querySelector('#uiLayerCoach2 .btn_confirm').click(), { timeout: 300 });
} catch (e) {
console.log('no coach2');
}
await page.waitForSelector('.btn_sure');
try {
await page.click('.btn_sure');
} catch (e) {
console.log('no popup');
}
await page.click('#btn_next');
// 가격 설명글 페이지
await page.waitForSelector('#mphnyn');
await page.click('#mphnyn');
await page.type('#dmndprc', '7700');
await page.type('#crmm', '매크로에 의해 셀프등록된 매물입니다.');
await page.evaluate(() => document.querySelectorAll('.submit')[2].click());
// 성능점검 페이지
await page.waitForSelector('#inspecnum');
await page.evaluate(() => document.getElementById('inspecnum').value = '');
await page.type('#inspecnum', '123123');
await page.type('#recordno1', '12');
await page.type('#recordno2', '12');
await page.type('#recordno3', '123');
await page.evaluate(() => document.getElementById('validity1').value = '20200401');
await page.evaluate(() => document.getElementById('validity2').value = '20210401');
await page.click('#firstregdtDaydiv .selectric');
await page.waitForSelector('#firstregdtDaydiv .selectric-items');
await page.evaluate(() => document.querySelectorAll('#firstregdtDaydiv .selectric-items li')[1].click());
await page.type('#carregistration', '123123');
await page.type('#motorType', '123123');
await page.type('#mlg', '12000');
try {
await page.type('#smout', '5', { timeout: 300 });
} catch (e) {
await page.type('#coout', '5', { timeout: 300 });
await page.type('#hcout', '5', { timeout: 300 });
}
await page.click('#issuedtDaydiv .selectric');
await page.waitForSelector('#issuedtDaydiv .selectric-items');
await page.evaluate(() => document.querySelectorAll('#issuedtDaydiv .selectric-items li')[1].click());
await page.type('#inspNm', '김점검');
await page.type('#noticeNm', '김고지');
await page.click('#submitOK');
// 사진 페이지
await page.waitForSelector('.btn_guide_close');
await page.click('.btn_guide_close');
await page.click('.notify_close');
await page.click('.btn_edit_prev');
// 결제
await page.waitForSelector('.btn_payment button');
await page.click('.btn_payment button');
browser.close();
return {
ok: true,
};
};
module.exports = selfRegister;