Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const http = require('http');
- const fs = require('fs');
- const express = require('express');
- const app = express();
- const mysql = require('mysql');
- const bodyParser = require('body-parser');
- const ejs = require('ejs');
- const puppeteer = require('puppeteer');
- const faker = require('faker/locale/en_US');
- // const lion_run = require('./lion');
- // let booking_code = lion_run.booking_code;
- var knex = require('knex')({
- client: 'mysql',
- connection: {
- host : '127.0.0.1',
- user : 'root',
- password : '',
- database : 'pointer_sys_db'
- }
- });
- app.use(bodyParser.json());
- app.use(bodyParser.urlencoded({ extended: false }));
- app.set('view engine', 'ejs')
- app.get('/',(req,res) => {
- res.send('Home page')
- })
- app.get('/testbook', async (req,res) => {
- if (req.query.airlineCode == "") {
- // res.send('Airline Code must not null');
- res.json({
- response: 'False',
- message: 'Airline Code must not null.'
- })
- return;
- }
- let vendorDetails;
- try {
- let knex_result = await knex('ms_share').where('id_share', req.query.airlineCode)
- vendorDetails = JSON.parse(JSON.stringify(knex_result));
- } catch (e) {
- console.log(e);
- }
- console.log('=====================================================================');
- // console.log('>> vendorDetails: ', vendorDetails);
- console.log('Airline : ', vendorDetails[0].name);
- console.log('ID Share : ', vendorDetails[0].id_share);
- // return;
- if (req.query.tripType == "OW") {
- let tripType = "OW";
- } else if (req.query.tripType == "RT") {
- let tripType = "RT";
- } else {
- // res.send('Type Trip must filled with OW or RT.');
- res.json({
- response: 'False',
- message: 'Type Trip must filled with OW or RT.'
- })
- return;
- }
- if (req.query.codeDepart == "") {
- // res.send('Code Depart Code must not null');
- res.json({
- response: 'False',
- message: 'Code Depart Code must not null.'
- })
- return;
- }
- if (req.query.codeArrive == "") {
- // res.send('Code Arrive Code must not null');
- res.json({
- response: 'False',
- message: 'Code Arrive Code must not null.'
- })
- return;
- }
- let datetime_test = new Date().toLocaleString();
- let booking_code;
- let booking_url;
- let error_report;
- let message;
- let vendorName = vendorDetails[0].name;
- let vendorId = vendorDetails[0].id_share;
- let airlineCode= req.query.airlineCode;
- let tripType= req.query.tripType;
- let codeDepart= req.query.codeDepart;
- let codeArrive= req.query.codeArrive;
- const lead = {
- firstName: faker.name.firstName(),
- lastName: faker.name.lastName()
- };
- // Generate phone number
- let phone_number = "0812"+Math.floor(100000 + Math.random() * 90000000);
- // Generate random date
- let adding_num = Math.floor(Math.random() * (13));
- let date_url = 15 + adding_num;
- // Generate month (use next 3 months from now)
- let date_now = new Date();
- let month_url = ("0" + (date_now.getMonth() + 3)).slice(-2);
- // Generate year
- let year_url = date_now.getFullYear();
- // let date_depart = date_url+'/'+month_url+'/'+year_url;
- const chromeOptions = {
- slowMo: 10,
- headless:false,
- args: ['--window-size=1200,750'],
- };
- // Generate folder to save screenshot file
- let year_dir_format = date_now.getFullYear();
- let month_dir_format = date_now.getMonth() + 1; //months from 1-12
- let date_dir_format = date_now.getDate();
- let hour_dir_format = date_now.getHours();
- let minute_dir_format = date_now.getMinutes();
- let second_dir_format = date_now.getSeconds();
- let unique_file_id = '_'+hour_dir_format+'_'+minute_dir_format+'_'+second_dir_format;
- let images_dir = './images';
- let year_dir = images_dir+'/'+year_dir_format.toString();
- let month_dir = images_dir+'/'+year_dir_format+'/'+month_dir_format.toString();
- let date_dir = images_dir+'/'+year_dir_format+'/'+month_dir_format+'/'+date_dir_format.toString()+'/';
- if (!fs.existsSync(images_dir)){
- fs.mkdirSync(images_dir);
- }
- if (!fs.existsSync(year_dir)){
- fs.mkdirSync(year_dir);
- }
- if (!fs.existsSync(month_dir)){
- fs.mkdirSync(month_dir);
- }
- if (!fs.existsSync(date_dir)){
- fs.mkdirSync(date_dir);
- }
- // console.log(hour_dir_format)
- // console.log(minute_dir_format)
- // console.log(second_dir_format)
- // return;
- (async function main() {
- // launch chromium
- const browser = await puppeteer.launch(chromeOptions);
- const page = await browser.newPage();
- await page.setViewport({width:1200, height:750});
- const navigationPromise = page.waitForNavigation({waitUntil: "domcontentloaded"});
- // login
- await page.goto('https://cta-dev.pointer.co.id/login');
- await page.waitFor('.card-body');
- const username= await page.waitForXPath("/html/body/div[1]/div/div[1]/form/div/div/div[4]/div[1]/input");
- await username.type("gaya.banda@yahoo.com");
- const password= await page.waitForXPath("/html/body/div[1]/div/div[1]/form/div/div/div[4]/div[2]/input");
- await password.type("qapointer");
- await page.screenshot({path:date_dir+'fill_login'+unique_file_id+'.png', fullPage: true});
- const login_button = await page.waitForSelector("#btn_login");
- await login_button.click();
- await page.waitFor(1000);
- // search book
- await page.goto('https://cta-dev.pointer.co.id/airline/flight?search='+airlineCode+'.'+codeDepart+'.'+codeArrive+'.'+date_url+'/'+month_url+'/'+year_url+'..1.0.0.1');
- booking_url = page.url();
- console.log("Booking URL is "+booking_url);
- await navigationPromise;
- if (airlineCode=='2') {
- try {
- await page.waitFor('.flightsec');
- } catch (error) {
- console.log(".flightsec didn't appear.");
- }
- await page.screenshot({path:date_dir+'pilihpenerbangan'+unique_file_id+'.png', fullPage: true});
- // const radio = await page.waitForXPath("/html/body/div[5]/div[2]/div[2]/div/div[2]/div/div/div/div[1]/div[2]/div[1]/div[3]/div/div[12]/label/span");
- // if (radio !== null) {
- // booking_url = page.url();
- // console.log("Booking URL is "+booking_url);
- // } else {
- // console.log('not found')
- // };
- // await radio.click();
- try {
- await page.waitForSelector('#message-error');
- const title = await page.$x("//h6");
- let text = await page.evaluate(h6 => h6.textContent, title[0]);
- error_report = text;
- console.log(text)
- message = 'Fail booking '+vendorName;
- try {
- await knex('automated_testbook').insert({
- "id": "",
- "datetime_test": datetime_test,
- "vendor_id": vendorId,
- "vendor_name": vendorName,
- "booking_url": booking_url,
- "error_report": error_report
- })
- res.json({
- datetime_test: datetime_test,
- vendor_id: vendorId,
- vendor_name: vendorName,
- booking_url: booking_url,
- error_report: error_report,
- message: message
- })
- } catch (e) {
- console.log(e);
- next(e)
- }
- await browser.close();
- } catch (error) {
- }
- try {
- // Pilih kelas bagian sisi kanan
- const radio = await page.waitForXPath("/html/body/div[5]/div[2]/div[2]/div/div[2]/div/div/div/div[1]/div[2]/div[1]/div[3]/div/div/label/span");
- await radio.click();
- } catch (error) {
- // Pilih kelas bagian sisi kiri
- const radio = await page.waitForXPath("/html/body/div[5]/div[2]/div[2]/div/div[2]/div/div/div/div[1]/div[2]/div[1]/div[3]/div/div/label/span");
- booking_url = page.url();
- // console.log("Booking URL is "+booking_url);
- await radio.click();
- }
- await page.screenshot({path:date_dir+'click_radio'+unique_file_id+'.png', fullPage: true});
- const bookingnow_button = await page.waitForSelector(".bookingnow");
- await bookingnow_button.click();
- await page.waitFor(4000);
- // await page.screenshot({path:date_dir+'masuk_pnr'+unique_file_id+'.png'});
- // fill pnr form
- const firstname_pnr = await page.waitForXPath("/html/body/div[5]/div[2]/div[2]/div/div[5]/b/form/div/div/div[1]/div/div/div[3]/div[2]/div/div/input");
- await firstname_pnr.type(lead.firstName);
- const lastname_pnr= await page.waitForXPath("/html/body/div[5]/div[2]/div[2]/div/div[5]/b/form/div/div/div[1]/div/div/div[3]/div[3]/div/div/input");
- await lastname_pnr.type(lead.lastName);
- const firstname_contact_person = await page.waitForXPath("/html/body/div[5]/div[2]/div[2]/div/b/div[1]/div/div/div[3]/div[2]/div/input");
- const lastname_contact_person= await page.waitForXPath("/html/body/div[5]/div[2]/div[2]/div/b/div[1]/div/div/div[3]/div[3]/div/input");
- const phone_contact_person = await page.waitForXPath("/html/body/div[5]/div[2]/div[2]/div/b/div[1]/div/div/div[3]/div[4]/div/input");
- await phone_contact_person.type(phone_number);
- // await page.waitFor(5000);
- // const btf_number = await page.waitForXPath("/html/body/div[5]/div[2]/div[2]/div/b/div[1]/div/div/div[4]/div[1]/div/input");
- // await btf_number.type("A4321");
- // const unit = await page.waitForXPath("/html/body/div[5]/div[2]/div[2]/div/b/div[1]/div/div/div[4]/div[2]/div/input[1]");
- // await unit.click();
- // const select_unit = await page.waitForXPath("/html/body/div[5]/div[2]/div[2]/div/b/div[1]/div/div/div[4]/div[2]/div/div/div[3]/div/li/ul/li[1]");
- // await select_unit.click();
- // const wbs = await page.waitForXPath("/html/body/div[5]/div[2]/div[2]/div/b/div[1]/div/div/div[4]/div[3]/div/input[1]");
- // await wbs.click();
- // const select_wbs = await page.waitForXPath("/html/body/div[5]/div[2]/div[2]/div/b/div[1]/div/div/div[4]/div[3]/div/div/div[3]/div/li/ul/li[1]");
- // await select_wbs.click();
- // const pemohon = await page.waitForXPath("/html/body/div[5]/div[2]/div[2]/div/b/div[1]/div/div/div[4]/div[1]/div/input");
- // await pemohon.type(lead.firstName+" "+lead.lastName);
- // const divisi = await page.waitForXPath("/html/body/div[5]/div[2]/div[2]/div/b/div[1]/div/div/div[4]/div[2]/div/input");
- // await divisi.type("Testbook");
- const btf = await page.waitForXPath("/html/body/div[5]/div[2]/div[2]/div/div[5]/b/form/div/div/div[1]/div/div/div[3]/div[4]/div/div/input");
- await btf.type("Test");
- await page.screenshot({path:date_dir+'isi_pnr'+unique_file_id+'.png', fullPage: true});
- const submit_pnr = await page.waitForXPath("/html/body/div[5]/div[2]/div[2]/div/b/div[1]/div/div/div[6]/input");
- await submit_pnr.click();
- await navigationPromise;
- // await page.waitFor(55000);
- } else if (airlineCode=='50') {
- console.log('citilink');
- return
- }
- // success booking
- const message_success = await page.waitForSelector('#message-success', {visible: true, timeout: 60000});
- booking_code = await page.$eval('.booking_code', e => e.innerHTML);
- console.log(booking_code);
- await page.screenshot({path:date_dir+'sukses_booking_'+booking_code+unique_file_id+'.png', fullPage: true});
- let save_name = lead.firstName+" "+lead.lastName;
- message = 'Success booking '+vendorName;
- res.json({
- datetime_test: datetime_test,
- contact_name: save_name,
- booking_code: booking_code,
- vendor_id: vendorId,
- vendor_name: vendorName,
- booking_url: booking_url,
- error_report: error_report,
- message: message
- });
- // res.send({
- // datetime_test: datetime_test,
- // contact_name: save_name,
- // booking_code: booking_code,
- // vendor_id: vendorId,
- // vendor_name: vendorName,
- // booking_url: booking_url,
- // error_report: error_report,
- // message: message
- // });
- try {
- await knex('automated_testbook').insert({
- "id": "",
- "datetime_test": datetime_test,
- "contact_name": save_name,
- "booking_code": booking_code,
- "vendor_id": vendorId,
- "vendor_name": vendorName,
- "booking_url": booking_url,
- "error_report": error_report
- });
- console.log(booking_code+" is inserted to db");
- res.json({
- datetime_test: datetime_test,
- contact_name: save_name,
- booking_code: booking_code,
- vendor_id: vendorId,
- vendor_name: vendorName,
- booking_url: booking_url,
- error_report: error_report,
- message: message
- });
- console.log(booking_code+" is send response json");
- } catch (e) {
- console.log(e);
- // next(e)
- }
- // try {
- // await res.json({
- // datetime_test: datetime_test,
- // contact_name: save_name,
- // booking_code: booking_code,
- // vendor_id: vendorId,
- // vendor_name: vendorName,
- // booking_url: booking_url,
- // error_report: error_report,
- // message: message
- // });
- // console.log(booking_code+" is send response json");
- // } catch (e) {
- // console.log(e);
- // next(e)
- // }
- // send response and then close the browser
- // await res.json({
- // airlineCode: req.query.airlineCode,
- // tripType: req.query.tripType,
- // codeDepart: req.query.codeDepart,
- // codeArrive: req.query.codeArrive,
- // message: 'Success booking lion'
- // })
- await browser.close();
- })()
- })
- app.use('/assets',express.static('assets'))
- app.listen(3000);
- console.log("Jalan di port 3000");
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement