김연우

merge listing

{
"env": {
"browser": true,
"es2021": true
},
"extends": "eslint:recommended",
"parserOptions": {
"ecmaVersion": "latest",
"sourceType": "module"
},
"rules": {
}
}
......@@ -5,6 +5,23 @@
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Mocha All",
"program": "${workspaceFolder}/node_modules/mocha/bin/_mocha",
"args": [
"--timeout",
"999999",
"--colors",
"${workspaceFolder}/test"
],
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
"skipFiles": [
"<node_internals>/**/*.js"
]
},
{
"type": "pwa-node",
"request": "launch",
"name": "Launch Program",
......
......@@ -40,23 +40,35 @@ ex)
*/
export async function get_schedule(id, pw, target_date) {
login(id, pw).then(async driver => {
load(driver, target_date)
.then(it => {
console.log(it)
logout(driver)
return await using_selenium( async (driver) => {
return await login(driver, id, pw)
.then(async () => {
return await load(driver, target_date)
.then((data) => {
//logout(driver)
console.log(data)
return data
})
})
})
}
export async function login(id, pw) {
export async function using_selenium(next) {
const option = new firefox.Options()
option.setBinary('C:\\Program Files\\Mozilla Firefox\\firefox.exe')
option.addArguments("-headless");
const driver = new selenium.Builder()
.forBrowser('firefox')
.setFirefoxOptions(option)
.build()
next(driver).finally(() => {
driver.quit()
})
}
export async function login(driver, id, pw) {
await driver.get("https://khcanvas.khu.ac.kr/")
const idInput = await driver.findElement(selenium.By.xpath('//*[@id="login_user_id"]'));
......@@ -87,7 +99,7 @@ export async function load(driver, until) {
export async function logout(driver) {
await driver.get("https://khcanvas.khu.ac.kr/")
const logoutPanel = await driver.findElement(selenium.By.xpath('html/body/div[2]/header[2]/div[1]/ul/li[1]/button/div[1]')).click();
await driver.findElement(selenium.By.xpath('html/body/div[2]/header[2]/div[1]/ul/li[1]/button/div[1]')).click();
await sleep(1000)
const logout = await driver.findElement(selenium.By.xpath('html/body/div[3]/span/span/div/div/div/div/div/span/form/button'));
logout.click()
......
import fs from 'fs/promises'
import { login, load, logout } from './khcanvas.js';
fs.readFile("asdffdsa.txt").then(it => {
const auth = it.toString().split('|')
login(auth[0], auth[1]).then(async driver => {
load(driver, new Date())
.then(it => {
console.log(it)
logout(driver)
})
}).catch(err => { console.log(err) })
})
\ No newline at end of file
......
This diff is collapsed. Click to expand it.
......@@ -14,13 +14,17 @@
"license": "",
"dependencies": {
"@types/selenium-webdriver": "^4.1.0",
<<<<<<< HEAD
"csv-parser": "^3.0.0",
"eslint": "^8.15.0",
=======
>>>>>>> 6c6e356fa8269fbbdee92f54a6f2f16ffe2ba729
"mocha": "^10.0.0",
"selenium-webdriver": "^4.1.2"
},
"type": "module",
"devDependencies": {
"@types/node": "^17.0.35"
"@types/node": "^17.0.35",
"eslint": "^8.16.0"
}
}
......
//### csv 파일에서 정보를 읽어오고, 2차원 배열화
const parse = require("csv-parse/lib/sync");
const fs = require("fs");
const csv = fs.readFileSync("todolistdata.csv");
console.log(csv.toString());
//parse 메서드 -> 2차원배열화
const records = parse(csv.toString());
const addr = []
for (var i = 0; i < records.length; i++){
for(var j = 0; j < records[i].length; j++){
addr.push(records[i][4]);
}
console.log(addr);
}
//------------------------------------------------------------------
//###주소로 장소 검색하기###
var mapContainer = document.getElementById('map'), // 지도를 표시할 div
mapOption = {
center: new kakao.maps.LatLng(33.450701, 126.570667), // 지도의 중심좌표
level: 3 // 지도의 확대 레벨
};
// 지도를 생성합니다
var map = new kakao.maps.Map(mapContainer, mapOption);
// 주소-좌표 변환 객체를 생성합니다
var geocoder = new kakao.maps.services.Geocoder();
// 찾을 주소
var searchAddress;
// 주소로 좌표를 검색합니다
geocoder.addressSearch(searchAddress, function(result, status) {
// 정상적으로 검색이 완료됐으면
if (status === kakao.maps.services.Status.OK) {
var coords = new kakao.maps.LatLng(result[0].y, result[0].x);
// 결과값으로 받은 위치를 마커로 표시합니다
var marker = new kakao.maps.Marker({
map: map,
position: coords
});
// 인포윈도우로 장소에 대한 설명을 표시합니다
var infowindow = new kakao.maps.InfoWindow({
content: '<div style="width:150px;text-align:center;padding:6px 0;">목적지</div>'
});
infowindow.open(map, marker);
// 지도의 중심을 결과값으로 받은 위치로 이동시킵니다
map.setCenter(coords);
}
});
\ No newline at end of file
//@ts-check
//https://github.com/gatoona/AWS-Selenium
import * as canvas from '../khcanvas.js'
import * as rd from 'readline'
import * as mocha from 'mocha'
import process from 'node:process';
import util from 'util'
import { rejects } from 'assert';
mocha.describe('khcanvas', () => {
mocha.it('opening selenium', async () => {
await canvas.using_selenium(async (driver) => {
await driver.get("http://khuhub.khu.ac.kr");
await driver.getTitle().then( (title) => {
console.log(title);
});
});
})
});
mocha.describe('khcanvas', () => {
mocha.it('get schedule', async () => {
const rl = rd.createInterface({
input: process.stdin,
output: process.stdout
})
const question = util.promisify(rl.question).bind(rl);
const a = await question('a');
const b = await question('b');
return await canvas.get_schedule(a, b, new Date())
.then(it => console.log(it))
.catch(it => {
console.log(it)
rejects(it)
})
})
});
\ No newline at end of file
......
분류,특징1,특징2,상호,주소
음식점,브런치,데이트,쏘니스,경기 수원시 영통구 매영로425번길 18 1층
음식점,일식,라멘,키와마루아지 경희대점,경기 수원시 영통구 영일로 8 1층 108호
음식점,한식,편안한,정통집 영통점,경기 수원시 영통구 청명남로 32 월드프라자 101호
주점,"소주,맥주",감성,금별맥주 수원영통점,경기 수원시 영통구 청명남로34번길 8 1층
주점,막걸리,편안한,전과 부침개 맛있는 집,경기 수원시 영통구 청명남로4번길 5-2
영화관,재미있는,편안한,메가박스 영통점,경기 수원시 영통구 봉영로 1579 그랜드백화점
볼링장,재미있는,유쾌한,킹덤 볼링장,경기 수원시 영통구 반달로7번길 40 평익칼라스위트
\ No newline at end of file